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