栈(stack)
栈是只允许在一端进行插入或删除操作的线性表
重要术语:栈顶、栈底、空栈
- 栈顶:允许插入和删除的一端,栈顶元素
- 栈底:不允许插入和删除的一端,栈底元素
特点:后进先出(LIFO)
栈的基本操作
- InitStack(&S):初始化栈。构造一个空栈S,分配内存空间(创)
- DestroyStack(&S):销毁栈。销毁并释放栈s所占的内存空间==(销)==
- Push(&S,x):进栈,若栈s未满,则将x加入使之成为新栈顶==(增)==
- Pop(&S,&x):出栈,若栈s非空,则弹出栈顶元素,并用x返回==(删)==
- GetTop(S,&x):读栈顶元素。若栈s非空,则用x返回栈顶元素==(查)==
- StackEmpty(s):判断一个栈s是否为空。若s为空则返回true,否则返回false
n个不同元素进栈,出栈元素不同排列的个数为1/(n+1)*C2nn
顺序栈
顺序存储:给各个数据元素分配连续的存储空间,大小为MaxSize*sizeof(ElemType)
初始化栈
#define MaxSize 10//定义栈中元素的最大个数
typedef struct{
ElemType data[MaxSize]//静态数组存放栈中元素
int top;//栈顶指针
}SqStack;//sequence--顺序
//初始化栈
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];//静态数组存放栈中元素,有最大容量上限
i