自用

#include <stdio.h>
#include <stdlib.h>#define DataType int // 栈节点的数据域,这里为整型
#define bool int
#define ERROR 0typedef struct node
{ // 定义链表节点 数据域与指针域DataType data;struct node *next;
} *StackNodePtr, StackNode;
typedef struct stack
{StackNodePtr top; // top为栈顶指针,空栈时top==NULL,int size;         // 设一个size可以降低计算链栈长度的时间复杂度
} LinkStack;LinkStack *InitStack();
void StackPushStack(LinkStack *p, DataType dt);
bool StackPopStack(LinkStack *p);
void StackClear(LinkStack *p);DataType StackGetTop(LinkStack *p);
int StackGetSize(LinkStack *p);
int StackIsEmpty(LinkStack *p);
void PrintStack(LinkStack *p);int main()
{DataType e;LinkStack *p = InitStack();printf("请输入一个整数(输入-1结束):");scanf("%d", &e);while (e != -1){StackPushStack(p, e);printf("请输入一个整数(输入-1结束):");scanf("%d", &e);}PrintStack(p);printf("栈的大小为%d\n", StackGetSize(p));printf("出栈测试:");StackPopStack(p);PrintStack(p);printf("\n");printf("取栈顶测试:");e = StackGetTop(p);printf("取出的栈顶为%d\n", e);}//初始化栈
LinkStack *InitStack()
{LinkStack *p = (LinkStack *)malloc(sizeof(LinkStack));p->top = NULL;p->size = 0;return p;
}// 入栈 链栈不用判断是否满 类似头插法
void StackPushStack(LinkStack *p, DataType dt)
{StackNodePtr temp;                              //temp用于产生新节点temp = (StackNodePtr)malloc(sizeof(StackNode)); // 随机分配空间temp->next = p->top;                            // 修改插入节点指针域,指向原来的栈顶元素(插入后变成老二)temp->data = dt;                                // 修改插入节点数据域为dtp->top = temp;                                  // top指向插入节点++p->size;                                      // size+1
}// 出栈 要检验栈是否空
bool StackPopStack(LinkStack *p)
{if (p->size == 0)return ERROR;           // 栈空返回错误StackNodePtr temp = p->top; // 将栈顶指针保存到tempp->top = temp->next;        // 让栈顶指针指向第二个节点free(temp);                 // 释放之前的栈顶指针--p->size;                  // size-1return 1;
}//清空栈
void StackClear(LinkStack *p)
{while (!StackIsEmpty(p)){ //只要栈不为空就一直出栈StackPopStack(p);}p->top = NULL; // 将栈顶指针变为空
}//获取栈顶元素
DataType StackGetTop(LinkStack *p)
{return p->top->data; // p->top为栈顶指针,指向栈顶节点,->为节点数据域
}
//获取栈大小
int StackGetSize(LinkStack *p)
{return p->size;
}
//判断栈是否为空
int StackIsEmpty(LinkStack *p)
{return !StackGetSize(p);
}//打印栈
void PrintStack(LinkStack *p)
{StackNodePtr temp = p->top;printf("栈顶:");while (temp){printf("%d->", temp->data);temp = temp->next;}printf("NULL");
}

C语言 栈的链表实现相关推荐

  1. c语言限流,C语言—栈

    栈的操作:进栈和出栈 #include "stdafx.h" #include "stack.h" #define maxsize 20 typedef int ...

  2. 猴子选王c语言链表程序代码,数据结构(C语言)用栈和链表编写猴子选大王程序...

    <数据结构(C语言)用栈和链表编写猴子选大王程序>由会员分享,可在线阅读,更多相关<数据结构(C语言)用栈和链表编写猴子选大王程序(3页珍藏版)>请在人人文库网上搜索. 1.i ...

  3. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  4. java语言实现单链表---不含头结点

    java语言实现单链表---不含头结点 一.相关概念 1.什么是线性表 2.什么是顺序表 3.什么是链表 4.单链表.双链表.循环单链表.循环双链表 5.头结点和首结点 6.常见的栈和队列与线性表的关 ...

  5. 饿了么交付中心语言栈转型总结

    Photo @NeONBRAN 文 | 李杰 前言: 本文介绍了饿了么交付中心由 Python 语言栈转换到 Java 语言栈大致过程,一来是对前段时间的工作做下总结,另外也是想通过此次总结为其他应用 ...

  6. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  7. Java数据结构 利用双栈实现链表操作

    利用双栈实现链表操作 class CQueue {private int count;private ListNode head;private ListNode tail;public CQueue ...

  8. c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...

    小编想问大家一个问题,就是如果我们需要进行测试一个单向链表是否存在环,应该使用什么方法才是最好的呢?如果大家还不知道有什么方法的话,那就接着往下面看哟!因为今天小编就要为大家介绍一下:在C语言中单向链 ...

  9. 用链表c语言程序设计,C语言程序设计-基于链表的学生成绩管理系统

    <C语言程序设计-基于链表的学生成绩管理系统>由会员分享,可在线阅读,更多相关<C语言程序设计-基于链表的学生成绩管理系统(18页珍藏版)>请在人人文库网上搜索. 1.华北科技 ...

最新文章

  1. MapReduce输入输出的处理流程及combiner
  2. php-dev离线安装,局域网 pm2 离线安装
  3. PHP框架和springboot区别,Spring和SpringBoot的区别
  4. 计算机视觉领域还能耍什么花样?
  5. JAVA设计模式--简单介绍
  6. 全国计算机英语四六级准考证打印准考证号,2017全国大学生英语四六级准考证打印...
  7. PHP提高编程效率的方法
  8. MEF(Managed Extensibility Framework)学习笔记
  9. [渝粤教育] 西南科技大学 中国古代文学〔1〕 在线考试复习资料
  10. 教你下载BarTender 2016
  11. 哇撒!这几个SpringBoot前后端分离项目(附源码),star过千,快去收藏夹吃灰吧。。。...
  12. java acr122 读取数据_acr122读写器软件下载
  13. 读书笔记:《从生活常识的角度看懂财务报表》
  14. 阿里云存储开通与使用
  15. 好利来背后隐形富豪家族:店面千家,年入百亿
  16. Time to live exceeded
  17. 面试运维宝典专栏的小伙伴,互联网老辛来给你送福利了
  18. Spring bean销毁的过程
  19. 数电篮球电子计分器设计
  20. 计算机应用编程师职业指导,计算机应用个人职业生涯规划书.doc

热门文章

  1. 如何判断对方列表里是不是好友_怎么查看我在别人好友列表里是否单向好友?...
  2. iOS开发之直播App流程介绍
  3. 解决SPSS 22授权creat not jvm问题
  4. “抄袭事件”开庭小志
  5. 考研数据结构与算法代码实现目录
  6. Java遍历Map五种方法
  7. 推荐一款完整的互联网商城管理系统(附源码)
  8. 护卫神·云查杀系统V4.0-安全检测部分
  9. lepus监控oracle数据库_Lepus(天兔)数据库监控系统之web控制台介绍
  10. 笔试记录|小米9.8秋招软件开发方向笔试