1、栈的基本概念
栈(Stack):限定在栈顶(表尾)进行插入(入栈)和删除(出栈)的线性表。基操作的特性是先进后出,又称为后进先出(Last In First Out, LIFO)的线性表。
2、栈的存储结构与基本运算
根据栈的设计存储结构的不同,一般分也顺序栈和链式栈,对应的基本运算操作也有所不同。
2-1 顺序栈存储结构与基本运算
栈的顺序存储是指分配一块连续的存储单元存放栈的元素,并同时附设一个变量(top)指向当前栈顶的位置。
栈的基本设定不一定都是相同的,这里设定top为-1时为栈空,也的设定是0为栈空。
- 栈顶指针:S.top,初始时设置为S.top = -1;
- 栈项元素:S.data[S.top];
- 进栈操作:栈不满时,栈项指针先加1,再送值到栈顶位置;
- 出栈操作:栈不空时,先取栈项元素,再把栈项指针-1;
- 栈空条件:S.top == -1;
- 栈满条件:S.top == MaxSize - 1;
- 栈长:S.top - 1;
2-1-1 顺序栈的存储结构
#define MaxSize 50
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
2-1-2 顺序栈的基本运算
- 初始化栈的代码片段
S.top = -1;
- 判断栈空的代码片段
if(S.top == -1)return true;
else return false;
- 进栈操作的代码片段
if(S.top == MaxSize-1)return false;
S.data[++S.top] = x;
- 出栈操作的代码片段
if(S.top == -1)return false;
x = S.data[S.top--];
- 读栈顶的代码片段
if(S.top == -1)return false;
x = S.data[S.top];
2-2 链式栈存储结构与基本运算
2-2-1 链式栈的存储结构
typedef struct Linknode{
ElemType data;
struct Linknode *next;
}*LiStack; //
2-2-2 链式栈的基本运算
3、栈的应用
Wu_Being 博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《【数据结构3】栈》
http://blog.csdn.net/u014134180/article/details/55506223

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。