链表 进栈出栈遍历清空
来源:互联网 发布:yaml nginx 编辑:程序博客网 时间:2024/05/29 13:08
#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 ;}
0 0
- 链表 进栈出栈遍历清空
- 遍历清空指定控件
- 遍历清空页面控件的值
- 遍历清空指定的控件
- 遍历子控件清空数据
- 【C#】遍历清空文本框内容
- 二叉查找树(BST)---创建 清空 遍历
- 递归遍历 清空窗体TextBox ComboBox 等的内容
- Ext.Net 1.x_Ext.Net_遍历清空textbox控件
- Asp.Net如何遍历所有TextBox控件并清空
- html5本地存储-遍历以及清空数据
- MFC遍历/清空所有Edit控件内容
- 栈的出栈、入栈、遍历、清空操作
- C#用foreach遍历清空文本框值
- HTML-Web-Storage(设置-展示-遍历-清空)
- 清空
- C++实现二叉树所有操作 -- 创建递归遍历迭代遍历拷贝清空查找
- 栈的,压栈,出栈,遍历,清空算法代码演示
- Android-transulcent-status-bar总结
- 汉诺塔递归与非递归
- (转)开发仅用两天三个人,谈谈小咖秀背后的技术故事
- C++标准模板库<algorithm>下的函数sort
- 1086: 去掉双斜杠注释
- 链表 进栈出栈遍历清空
- python制作pdf电子书
- spring mvc4处理日期格式问题
- 算法提高 质因数2
- Windows下打jar包操作
- 配置文件
- “永恒之蓝"漏洞的紧急应对--毕业生必看
- 在HTML中使用JavaScript
- 编程基础题-3