######官方语言 栈是一个后进先出的线性表,它的要求只在表尾进行删除和插入。
通俗的讲 有三个基本信息
- 栈的元素必须 ”先进后出“
- 栈的操作只能在线性表的表尾进行
- 对栈来说 表尾就是栈顶,表头就是栈底。
栈的操作:
- 从栈顶压栈push
- 出栈从栈顶出 pop ios 的 nav导航控制 就是这样的。
#####栈的顺序存储结构
#include typedef struct { ElemType *base; ElemType *top; int stackSize; }sqStack;
base是指向栈底的指针 top 是栈顶指针
stackSize是栈的最大容量
######进栈与出栈(记事本写的代码,没有验证只提供思路)
- 入栈
#define SATCKINCREMENT 10 Push(sqStac \*s, ElemType e) { //这里是栈顶-栈底 ,超出了栈的大小,我们 动态增加它大小 if (s->top - s->base >= s->stackSize) { a->base = (ElemType \*)realloc(s->base,(a->stackSize + SATCKINCREMENT )+sizeof(ElemTyp)); if (!s->base) exit(0); s->top = s->base+s-> stackSize; //设置栈顶 s->stackSIze = s - >stacKsize + SATCKINCREMENT; // 记录栈的大小 } *(s->top) = e;//设置参数 s->top++ //移动栈顶指针 }
- 出栈
Pop (sqStack \*s,ElemType \*e) { if (s->top == s->base) //栈已空空 return; \*e =*--(s->top) //ps 栈顶是没有东西的 ,是准备存东西的 }
- 清空栈
ClearStack(sqStack *s) { s->top = s->base }
- 销毁栈
DestroyStack(sqStack *s) { int i , len; len = s->stackSize; for (i=0;ibase); s->base++; } s->base = s->top = NULL; s->stackSize = 0; }
- ######看我那么可爱n(≧▽≦)n
- 关注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
- 个人博客: www.liangtongzhuo.com
- ios 个人写的app (同人音声)ASMR音乐