栈 (出pop 进push)(销毁,清空)

官方语言

栈是一个后进先出的线性表,它的要求只在表尾进行删除和插入。

通俗的讲 有三个基本信息

  • 栈的元素必须 ”先进后出“
  • 栈的操作只能在线性表的表尾进行
  • 对栈来说 表尾就是栈顶,表头就是栈底。

栈的操作:

  • 从栈顶压栈push
  • 出栈从栈顶出 pop
    ios 的 nav导航控制 就是这样的。
栈 (出pop 进push)(销毁,清空)_第1张图片
栈的顺序存储结构

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;i free(s->base);
    s->base++;
    }
    s->base = s->top = NULL;
    s->stackSize = 0;
    }
  • 看我那么可爱n(≧▽≦)n
  • 关注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
  • 个人博客: www.liangtongzhuo.com
  • ios 个人写的app (同人音声)ASMR音乐

你可能感兴趣的:(栈 (出pop 进push)(销毁,清空))