1.顺序栈的定义
#define MaxSize 10 //定义顺序栈中元素的最大个数
typedef struct{
ElemType data[MaxSize];//静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
void testStack(){
SqStack S;//声明一个顺序栈(分配空间)
//。。。后续操作
}
栈顶指针大小为4B
初始化操作
#define MaxSize 10 //定义顺序栈中元素的最大个数
typedef struct{
ElemType data[MaxSize];//静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
//初始化栈
void InitStack(SqStack &S){
S.top = -1; //初始化栈顶指针
}
void testStack(){
SqStack S;//声明一个顺序栈(分配空间)
InitStack(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.top = S.top + 1;//指针先+1
S.data[S.top] = x;//新元素入栈
return true;
}
出栈操作
bool Pop(SqStack &S,ElemType &x){
if(S.top==-1)//栈空 报错
return false;
x=S.data[S.top];//栈顶元素先出栈
S.top = S.top -1;//指针再减1
return true;
}
出栈操作
bool Pop(SqStack &S,ElemType &x){
if(S.top==-1)//栈空 报错
return false;
x=S.data[S.top--];//栈顶元素先出栈 指针再减1
return true;
}
读栈顶元素
bool GetTop(SqStack &S,ElemType &x){
if(S.top==-1)//栈空 报错
return false;
x=S.data[S.top];//x记录栈顶元素
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; //初始化栈顶指针【与之前的不同】
}
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];
【共享栈】
//初始化栈
#define MaxSize 10 //定义顺序栈中元素的最大个数
typedef struct{
ElemType data[MaxSize];//静态数组存放栈中元素
int top0; //0号栈顶指针
int top1; //1号栈栈顶指针
}ShStack;
//初始化栈
void InitStack(ShStack &S){
S.top0 = -1; //初始化栈顶指针
S.top1 = MaxSize;
}
栈满的条件:
top0+1==top1