栈,是一种只能在表尾进行插入或删除操作的线性表。按照先进后出的原则储存数据。先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
栈的相关概念:
- 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
- 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
- 弹栈:栈的删除操作,也叫做出栈
栈的相关操作:
- 弹栈,通常命名为pop
- 压栈,通常命名为push
- 求栈的大小
- 判断栈是否为空
- 获取栈顶元素的值
压栈,通常命名为push
在网上找的图:
代码如下:
void Push(sqStack *s, ElemType e) { if(s->top - s->base >=STACK_INIT_SIZE) { s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT )* sizeof(ElemType)); if(!s->base) { exit(0); } } *(s->top)=e; s->top++; }
弹栈,通常命名为pop
代码如下:
void Pop(sqStack *s,ElemType *e) { if(s->top==s->base) { return; } *e =*--(s->top); }
栈的长度:
int StackLen(sqStack s) { return (s.top - s.base); }
剩下的操作比较简单,把判断栈是否为空的代码放在pop和push的中间,