数据结构小结——顺序栈
来源:互联网 发布:java 电脑配置 编辑:程序博客网 时间:2024/05/18 07:54
栈是数据结构中的一种存储方式,和栈内存没有什么关系,它可以存在栈内存上,也可以存在堆内存上,此篇介绍的顺序栈栈就是存在栈内存上的。
顺序栈顾名思义,就是存在内存上连续一段地址空间内的栈,和顺序表差不多。
栈有一个要求就是先入后出,后入先出。
结构很简单:
#define SIZE 10typedef int StackData; typedef struct _stack{ StackData data[SIZE]; // 栈数组 int top; // 栈顶元素下标}Stack;
这么用呢,第一步要置空栈,也就相当于给它初始化了:
int InitStack (Stack *S) { if (S == NULL) { errno = ERROR; return FALSE; } S->top = -1; }
因为是顺序栈,是基于数组来存储数据的,所以它的空间大小是固定的,所以必要要判断栈满、栈空这两种情况:
//判断栈空int StackEmpty (Stack *S){ if (S == NULL) { errno = ERROR; return FALSE; } return S->top == -1;}//判断栈满int StackFull (Stack *s){ if (s == NULL) { errno = ERROR; return FALSE; } return s->top == (SIZE-1);}
对栈数据的操作一定要符合先入后出的原则:
入栈或者叫压栈其实就是在尾部添加数据:
int Push (Stack *s, StackData x){ if (s == NULL) { errno = ERROR; return FALSE; } // 判断是否满栈 if (StackFull(s)) { errno = FULL_STACK; return FALSE; } s->data[++s->top] = x; return TRUE;}
而出栈也就是从尾部将数据取出来丢掉:
//这里的*x是用来存储出栈的值int Pop (Stack *s, StackData *x){ if (s == NULL) { errno = ERROR; return FALSE; } // 判断是否空栈 if (StackEmpty(s)) { errno = EMPTY_STACK; return FALSE; } *x = s->data[s->top--]; return TRUE;}
栈其实就是这么简单,只要满足先入后出这个原则就可以了,需要完整代码请直接下载(免积分)
阅读全文
0 0
- 数据结构小结——顺序栈
- 数据结构小结——顺序队列
- 数据结构—栈小结
- 数据结构小结——顺序表(数组版)
- 数据结构小结——顺序表(指针版)
- 数据结构——顺序栈
- 数据结构——顺序栈
- 数据结构——顺序栈
- 数据结构——顺序栈
- 数据结构—递归小结
- 数据结构—队列小结
- 数据结构—顺序串
- 数据结构—顺序表
- 数据结构——顺序栈,双向顺序栈,链栈
- 数据结构(寒假小结)——2.1线性表之顺序表
- 数据结构小结——顺序表(柔性数组版 下)
- 数据结构——栈之顺序栈
- 数据结构——栈(顺序栈)
- java求最大值,当用户输入end的时候显示刚才输入数字中的最大值
- 条款07:为多态基类声明virtual析构函数
- C++知识点(一)
- Java设计模式之适配器设计模式(项目升级案例)
- Ubuntu下安装MySQL安装及入門
- 数据结构小结——顺序栈
- 003_JS实现图片轮播与点击播放
- 新版支付宝WAP支付成功回调接口验签失败问题解决办法
- vijos1059 积木城堡(背包)
- PHPStorm2017的激活与汉化
- 工作笔记(2017/8/6)
- js index属性及jquery index()方法
- HDU 3280 Equal Sum Partitions(区间DP)【模板】
- HDU 1082 COURSES (二分图匹配之匈牙利算法)