(8)栈
来源:互联网 发布:samba端口转发 编辑:程序博客网 时间:2024/06/05 03:08
栈是只允许在表尾进行插入、删除的线性表。对栈来说,表尾有特殊的含义,我们将表尾称为栈顶,而表的另一端,即表头称为栈底。不含元素的空表称为空栈。由其定义可以看出先进入栈的元素最后才能出栈,所以栈又被称为后进先出的线性表。
若栈满,执行进栈则发生上溢。若栈空,执行退栈则发生下溢。
1)利用顺序存储结构实现的栈称为顺序栈
2)利用链式存储结构实现的栈称为链栈
两种栈的基本实现操作:
1)Init() 初始化
2) Empty() 判栈空
3) Push() 入栈
4) Pop() 出栈
5) GetTop() 读栈顶元素
6)Clear() 清空栈
若栈满,执行进栈则发生上溢。若栈空,执行退栈则发生下溢。
1)利用顺序存储结构实现的栈称为顺序栈
2)利用链式存储结构实现的栈称为链栈
两种栈的基本实现操作:
1)Init() 初始化
2) Empty() 判栈空
3) Push() 入栈
4) Pop() 出栈
5) GetTop() 读栈顶元素
6)Clear() 清空栈
7)Length() 求栈长
代码(顺序栈):
#include<iostream>using namespace std;#define MAXSIZE 100typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int top;}Stack;Stack Init() {Stack s;s.top = -1;return s;}void Empty(Stack s) {if (s.top == -1) {cout <<"栈为空!" << endl;}else cout << "栈不为空!" << endl;}Stack Push(Stack s,ElemType a) {if (s.top == MAXSIZE - 1) {cout << "栈满!压栈失败!" << endl;}else {s.top++;s.data[s.top] =a;cout << "压栈成功!" << endl;}return s;}Stack Pop(Stack s) {if (s.top == -1) {cout << "栈为空!没有元素出栈" << endl;}else {cout << s.data[s.top] << endl;s.top--;}return s;}void GetTop(Stack s) {if (s.top != -1) {cout << "栈顶元素是:" << s.data[s.top] << endl;}else {cout << "空栈,没有栈顶元素" << endl;}}Stack clear(Stack s) {s.top = -1;cout << "清除成功!" << endl;return s;}void Length(Stack s) {cout << "栈的长度为:" << s.top+1<< endl;}void print() {cout << "*******************************************" << endl;cout << "* 1判断栈是否为空 2入栈 *" << endl;cout << "* 3出栈 4读栈顶元素 *" << endl;cout << "* 5清空栈 6求栈长 *" << endl;cout << "* 7 清屏 8 退出 *" << endl;cout << "*******************************************" << endl;}void main() {int i,x;Stack s = Init();print();while (1) {cin >> i;switch (i){case 1:Empty(s); break;case 2:cin >> x; s=Push(s, x); break;case 3:s=Pop(s); break;case 4:GetTop(s); break;case 5:s=clear(s); break;case 6:Length(s); break;case 7:system("cls"); print(); break;case 8:exit(0); break;default:cout << "输出值超出范围,请重新输入!"<<endl; break;}} }代码(链栈):
#include<iostream>using namespace std;#define MAXSIZE 100typedef int ElemType;typedef struct StackNode{ElemType data;StackNode *next;}StackNode,*LinkedStack;LinkedStack Init() {LinkedStack s;s = NULL;return s;}void Empty(LinkedStack s) {if (s == NULL) {cout <<"栈为空!" << endl;}else cout << "栈不为空!" << endl;}LinkedStack Push(LinkedStack s,ElemType a) {LinkedStack p = (StackNode*)malloc(sizeof(StackNode));p->data = a;p->next = s;s = p;cout << "压栈成功!" << endl;return s;}LinkedStack Pop(LinkedStack s) {if (s==NULL) {cout << "栈为空!没有元素出栈" << endl;}else {cout << s->data << endl;s = s->next;}return s;}void GetTop(LinkedStack s) {if (s != NULL) {cout << "栈顶元素是:" << s->data << endl;}else {cout << "空栈,没有栈顶元素" << endl;}}LinkedStack clear(LinkedStack s) {LinkedStack p;while (s!= NULL) {p = s;s = s->next;free(p);}cout << "清除成功!" << endl;return s;}void Length(LinkedStack s) {int i = 0;while (s!=NULL) {i++;s = s->next;}cout << "栈的长度为:" << i << endl;}void print() {cout << "*******************************************" << endl;cout << "* 1判断栈是否为空 2入栈 *" << endl;cout << "* 3出栈 4读栈顶元素 *" << endl;cout << "* 5清空栈 6求栈长 *" << endl;cout << "* 7 清屏 8 退出 *" << endl;cout << "*******************************************" << endl;}void main() {int i,x;LinkedStack s = Init();print();while (1) {cin >> i;switch (i){case 1:Empty(s); break;case 2:cin >> x; s=Push(s, x); break;case 3:s=Pop(s); break;case 4:GetTop(s); break;case 5:s=clear(s); break;case 6:Length(s); break;case 7:system("cls"); print(); break;case 8:exit(0); break;default:cout << "输出值超出范围,请重新输入!"<<endl; break;}} }
0 0
- (8)栈
- 算法(8)栈
- 看数据结构写代码(8)顺序栈的实现
- 顺序栈(10进制转化成8进制数)
- Linux内核协议栈(8)IO复用select函数
- pta 5-8 表达式转换 (25分) (栈)
- 2017/8/12训练日记(单调栈)
- 8、Spring技术栈-拦截器(Interceptor)使用
- 栈的基本操作——2,8,16进制的入栈(源文件)
- 栈的基本操作——2,8,16进制的入栈(头文件)
- 数据结构8-栈复习大纲
- 指针实现的栈(包含进制转换算法实现,括号匹配算法实现)【8】
- 读书笔记——Windows核心编程(8)Interlocked单向链式栈
- 程序员面试金典(8)一个数组实现三个栈
- 读书笔记——Windows核心编程(8)Interlocked单向链式栈
- 栈和队列(8)-- 最大值减去最小值小于或者等于num的子数组
- java1.8一个不错的api调用栈(1)从Stream<?>创建一个Map
- 集训第十五天(2017/8/14):单调队列&单调栈
- JNI
- 【《代码整洁之道》精读与演绎】之五 整洁类的书写准则
- 使用ToolBar实现功能及原理
- Android布局优化----ViewSub的使用
- 自动识别验证码软件应注重的几个方面
- (8)栈
- html5工具
- 【游戏设计模式】之一 序言:架构,性能与游戏
- javaMail简易实现
- Unity中视频播放的两种形式
- 【Android热修复、零】android分包64K实践
- Interop type 'Microsoft.Office.Interop.Excel.ApplicationClass' cannot be embedded. Use th e applic
- jenkins+git配置
- Linux上发布的Web项目,通过Win虚拟机在IEz中登陆不了账号