只允许在一端进行插入或删除的线性表
术语:栈顶、栈底、空栈
特点:后进先出(LIFO)
n个不同元素进栈,出栈元素不同排列的个数为 1 n + 1 C 2 n n \frac{1}{n+1}C_{2n}^n n+11C2nn——卡特兰数
考点:出栈顺序
1.实现
sq:seqence 顺序
#define MaxSize 10
typedef struct{
ElemType data[MaxSize];
int top;//栈顶指针
}SqStack;
2. 基本操作
InitStack(&S) 初始化栈。构造空栈,分配存储空间
DestoryStack(&L) 销毁并释放栈S占用的内存空间
Push(&S,x) 进栈,若S未满,将x加入成为栈顶
Pop(&S,&x) 出栈,若S非空,弹出栈顶元素,用x返回
GetTop(S,&x) 读栈顶元素
StackEmpty(S) 判空
2.1初始化
void InitStack(SqStack &S)
{
S.top = -1;
}
2.2判空
bool StackEmpty(SqStack S)
{
if(S.top == -1)//空
return true;
else
return false;
}
2.3进栈
bool Push(SqStack &S,ElemType x)
{
if(S.top == MaxSize-1)
return false;
S.data[++S.top] = x;
return true;
}
2.4出栈
bool Pop(SqStack &S,ElemType &x)
{
if(S.top==-1)
return false;
x = S.data[S.top--];
return true;
}
3.共享栈
#define MaxSize 10
typedef struct{
ElemType data[MaxSize];
int top0;
int top1;
}ShStack;
//初始化
void InitStack(ShStack &S)
{
S.top0 = -1;
S.top1 = MaxSize;
}
4.链栈
类似单链表头插法
typedef struct Linknode{
ElemType data;
struct Linknode *next;
}*LiStack;