写在前面的一些话:这只是个人学习王道数据结构的代码笔记,仅供参考,如果有错误请友好的指出,谢谢!!!
栈
栈(stack)是一种只允许在一端插入或删除操作的线性表。
一、顺序栈
采用顺序存储的栈成为顺序栈。
顺序栈的初始化
顺序栈的定义如下:
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
int data[MaxSize];//静态数组存放栈中元素
int top;//栈顶指针
}SqStack;
顺序栈的初始化:
void InitStack(SqStack &S){
S.top=-1;//初始化栈顶指针
}
判断一个顺序栈是否栈空:
bool SqStackEmpty(SqStack S){
if(S.top==-1)
return true;//栈空
else
return false;//不空
}
完整代码:
#include <iostream>
using namespace std;
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
int data[MaxSize];//静态数组存放栈中元素
int top;//栈顶指针
}SqStack;
void InitStack(SqStack &S){
S.top=-1;//初始化栈顶指针
}
bool SqStackEmpty(SqStack S){
if(S.top==-1)
return true;//栈空
else
return false;//不空
}
void testStack(){
SqStack S;//声明一个顺序栈(分配空间)
InitStack(S);//初始化一个栈
cout<<(SqStackEmpty(S)?"栈空":"栈非空")<<endl;
}
int main(){
testStack();
return 0;
}
出栈和入栈
入栈:
bool Push(SqStack &S,int x){
//入栈
if(S.top==MaxSize-1)
return false;//栈满,报错
S.top++;//指针先加一
S.data[S.top]=x;//新元素入栈
return true;
}
出栈:
bool Pop(SqStack &S,int &x){
//出栈
if(S.top==-1)//栈空,报错
return false;
x=S.data[S.top];//栈顶元素先出栈
S.top--;//栈顶指针减一
return true;
}
读栈顶元素(出栈会删除栈顶元素,读栈顶元素不会删除栈顶元素):
bool GetTop(SqStack S,int &x){
//读栈顶元素
if(S.top==-1)//栈空报错
return false;
x=S.data[S.top];//x记录栈顶元素
return true;
}
完整代码:
#include <iostream>
using namespace std;
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
int data[MaxSize];//静态数组存放栈中元素
int top;//栈顶指针
}SqStack;
void InitStack(SqStack &S){
S.top=-1;//初始化栈顶指针
}
bool SqStackEmpty(SqStack S){
if(S.top==-1)
return true;//栈空
else
return false;//不空
}
bool Push(SqStack &S,int x){
//入栈
if(S.top==MaxSize-1)
return false;//栈满,报错
S.top++;//指针先加一
S.data[S.top]=x;//新元素入栈
return true;
}
bool Pop(SqStack &S,int &x){
//出栈
if(S.top==-1)//栈空,报错
return false;
x=S.data[S.top];//栈顶元素先出栈
S.top--;//栈顶指针减一
return true;
}
bool GetTop(SqStack S,int &x){
//读栈顶元素
if(S.top==-1)//栈空报错
return false;
x=S.data[S.top]