数据结构三要素——逻辑结构、数据的运算、存储结构(物理结构)
栈(Stack)是只允许在一端进行插入或删除操作的线性表
逻辑结构:与普通线性表相同
数据的运算:插入、删除操作有区别
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top; //栈顶指针
- }SqStack; //Sq:sequence——顺序
-
- void testStack(){
- SqStack S; //声明一个顺序栈(分配空间)
- //……后续操作……
- }
顺序存储:给各个数据元素分配连续的存储空间,大小为:MaxSize*sizeof(ElemType)
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top; //栈顶指针
- }SqStack; //Sq:sequence——顺序
-
- //初始化栈
- void InitStack(SqStack &S){
- S.top = -1; //初始化栈顶指针
- }
-
- void testStack(){
- SqStack S; //声明一个顺序栈(分配空间)
- //……后续操作……
- }
-
- //判断栈空
- bool StackEmpty(SqStack S){
- if(S.top == -1) //栈空
- return true;
- else
- return false;
- }
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top; //栈顶指针
- }SqStack;
-
- //新元素入栈
- bool Push(SqStack &S,ElemType x){
- if(S.top == MaxSize-1) //栈满,报错
- return false;
- S.data[++S.top] = x;
- return true;
- }
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top; //栈顶指针
- }SqStack;
-
- //出栈操作
- bool Pop(SqStack &S,ElemType &x){
- if(S.top == MaxSize-1) //栈空,报错
- return false;
- x = S.data[S.top]; //栈顶元素先出栈
- S.top = S.top -1; //指针再减1,数据还残留在内存中,只是逻辑上被删除了
- return true;
- }
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top; //栈顶指针
- }SqStack;
-
- //出栈操作
- bool Pop(SqStack &S,ElemType &x){
- if(S.top == MaxSize-1) //栈空,报错
- return false;
- x = S.data[S.top--]
- return true;
- }
-
- //读栈顶元素
- bool GetTop(SqStack S,ElemType &x){
- if(S.top== -1) //栈空,报错
- return false;
- x = S.data[S.top]; //x记录栈顶元素
- return true;
- }
另一种方式:
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top; //栈顶指针
- }SqStack;
-
- //初始化栈
- void InitStack(SqStack &S){
- S.top = 0; //初始化栈顶指针(初始指向0)
- }
- void testStack(){
- SqStack S; //声明一个顺序栈(分配空间)
- InitStack(S);
- //……后续操作……
- }
-
- //判断栈空
- bool StackEmpty(SqStack S){
- if(S.top ==0) //栈空
- return true;
- else
- return false;
- }
-
- //进栈
- S.data[S.top++]=x;
- //出栈
- x=S.data[--S.top];
栈满条件:top == MaxSize
缺点:栈的大小不可变
- #define MaxSize 10 //定义栈中元素的最大个数
- typedef struct{
- ElemType data[MaxSize] //静态数组存放栈中元素
- int top0; //0号栈栈顶指针
- int top1; //1号栈栈顶指针
- }SqStack;
-
- //初始化栈
- void InitStack(SqStack &S){
- S.top0 = -1; //初始化栈顶指针
- S.top1 = MaxSize;
- }
- 满栈的条件:top0 + 1 = top1
- typedef struct Linknode{
- ElemType data; //数据域
- struct Linknode *next; //指针域
- }*LiStack; //栈类型定义
基本操作参考单链表(创:初始化;增:进栈;删:出栈;查:获取栈顶元素)