【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
2017-05-11 21:00
295 查看
学完链表后就学了栈,一直想用代码实现下,可是要打工啊·······都连续加了两晚夜班了,累死了······今天休息,用了些时间写了写,还是和以前一样希望和新手一起学习,
也希望得到大神指导。
看代码吧,注释不合适的地方,请见谅······
也希望得到大神指导。
看代码吧,注释不合适的地方,请见谅······
#include <stdio.h> #include <stdlib.h> #include <malloc.h> // 定义一个节点的结构 typedef struct node { int member; //数据域 struct node * pNext;//指针域 }Node,*pNode; // 定义一个栈结构 typedef struct stack { pNode Top; //栈顶 pNode Bottom; //栈底 }Stack,* pStack; void InitStack(pStack ); // 初始化栈的函数 bool Push(pStack ,int); // 进行压栈操作的函数 void TraverseStack(pStack ); // 遍历栈函数 bool Empty(pStack ); // 判断栈是否为空的函数 int Pop(pStack ); // 进行出栈操作的函数 void Clear(pStack ); // 清空栈的函数 int main(void) { Stack s; // 定义一个栈 int i; int num; int data; // 临时保存用户输入的数据 int re_num; // 保存Pop函数的返回值 InitStack(&s); printf("你想输入几个数据啊:"); scanf("%d",&num); for (i = 0;i < num;i++) { printf("第 %d 个数:",i+1); scanf("%d",&data); if (Push(&s,data)) // 调用Push函数 { continue; } else { printf("进行进栈操作失败!\n"); exit(-1); } } TraverseStack(&s); // 调用遍历函数 printf("你想去掉几个数啊: "); scanf("%d",&data); printf("你去掉的数字是:"); for (i = 0; i < data;i++) { re_num = Pop(&s); // 调用Pop函数,并把返回值赋给re_num; printf("%d ",re_num); } printf("看看删除后还有啥:"); TraverseStack(&s); printf("\n"); Clear(&s); // 调用清空栈函数 printf("遍历下看看栈清空没····\n"); TraverseStack(&s); printf("\n"); return 0; } // 进行栈的初始化的函数 void InitStack(pStack ps) { ps->Top = (pNode)malloc(sizeof(Node)); // 分配内存空间给栈顶 if (NULL == ps->Top) { printf("动态分配内存失败\n"); exit(-1); } else { ps->Bottom = ps->Top; // 使栈底也指向栈顶空间 ps->Top->pNext = NULL; // 栈顶指针置为NULL; } return ; } // 进行进栈操作的函数 bool Push(pStack ps,int data) { pNode pNew = (pNode)malloc(sizeof(Node)); // 定义一个新节点,并分配内存空间 if (NULL == pNew) { return false; } pNew->member = data; // 把要进栈的数据赋给新节点的member成员 pNew->pNext = ps->Top; // 使新节点的指针指向栈顶 ps->Top = pNew; // 把新节点作为新栈顶 return true; } // 遍历栈的函数 void TraverseStack(pStack ps) { pNode pNew = ps->Top; while(pNew!= ps->Bottom) // 只要栈顶不等于栈底,循环 { printf("%d ",pNew->member); // 打印栈顶的成员member pNew = pNew->pNext; // 栈顶指针向下移动一次 } return ; } // 判断栈是否为空 bool Empty(pStack ps) { if(ps->Top == ps->Bottom) // 栈顶等于栈底,不就是栈中没数据么 { return true; } else { return false; } } // 进行出栈操作函数 int Pop(pStack ps) { pNode pSwap = NULL; int return_val; if (Empty(ps)) //判断栈是否为空,为空就不能进行出栈操作 { exit(-1); } else { return_val = ps->Top->member; // 把栈顶的成员member的值赋给return_val做为函数返回值 pSwap = ps->Top; // 使pSwap指向栈顶 ps->Top = ps->Top->pNext; // 使栈顶指向栈顶下一个节点 free(pSwap); // 释放以前的栈顶空间 return return_val; } } // 清空栈的函数 void Clear(pStack ps) { pNode pNew = NULL; while (ps->Top != ps->Bottom) // 栈顶和栈底不等,循环 { pNew = ps->Top; // 使一个新节点和栈顶指向同一空间 ps->Top = ps->Top->pNext; // 使栈顶指向栈顶的下一个节点 free(pNew); // 释放掉以前的栈顶空间 } return ; }
相关文章推荐
- 【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
- 【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
- 【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
- [数据结构]c语言实现链栈的入栈,出栈,清空,销毁等操作
- [数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作
- 【数据结构】用C语言实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 栈的操作(创建,入栈,出栈,清空,遍历等等)
- Chapter 3 | Stacks and Queues--实现数据结构模拟一个栈由几个子栈组成,并可以在指定子栈上进行出栈操作
- javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- [数据结构][C语言]图的基本介绍和操作实现之图的存储结构
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- 【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- C语言实现单链表的初始化、创建、遍历等操作
- c语言实现对传统单链表的创建、添加 遍历 删除 反转元素操作
- C++实现二叉树所有操作 -- 创建递归遍历迭代遍历拷贝清空查找
- 【数据结构】用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等)
- Linux系统遍历文件夹 获取文件大小的操作(C语言实现)
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 【数据结构】栈的入栈和出栈操作,并实现栈的进制转换应用