栈(Stack)
栈是只允许在一端进行插入或者删除操作的线性表(LILO:先进后出)
栈的基本操作
- 创 InitStack(&S):初始化栈,构建一个空栈S,分配内存空间
- 销 DestoryStack(&L):销毁栈,销毁并释放栈L所占用的内存空间
- 增 PushStack(&S,x):进栈,若栈S未满,则将x加入使之成为新栈顶
- 删 Pop(&S,&x):出栈,若栈S非空,则弹出栈顶元素,并用x返回
- 查 GetTop(S,&x):读栈顶元素,若栈S非空,则用x返回栈顶元素
n个不同元素进栈,出栈元素不同排列个数为:
顺序栈
声明及初始化
//声明
#define MaxSize 10;
typedef struct{
ElemType data[MaxSize]; //静态数组中存放栈中元素
int top;//栈顶指针
}SqStack;
//初始化
void InitStack(SqStack &S){
S.top = -1; //初始化栈顶指针
}
//判断栈空
bool StackEmpty(SqStack S){
if(S.top == -1){
return false; //如果栈顶指针指向初始化的-1,说明栈为空
}
return true;
}
进栈操作
bool pushStack(SqStack &S,ElemType &x){
if(S.top == maxSize - 1){
return false; //栈满报错
}
S.data[++S.top] = x; //首先指针后移,然后再给指针赋值
return true;
}
出栈操作
bool Pop(SqStack &S,ElemType &x){
if(S.top == -1){ //栈空,报错
return false;
}
}
读栈顶元素
bool getTop(SqlStack S, Element &x){
if(S.top == -1){
return false;
}
x = S.data[S.top];
return true;
}
链栈
栈的链式存储,统称为链栈,我们可以把它理解成阉割版的单链表,比如基本的增删改查操作也基本上和单链表的操作差不太多,区别只是链栈只能在一端进行操作…