一、栈的基本概念
栈(Stack):只能在一端进行插入或者删除的,先进后出的线性表。
栈顶:线性表能进行插入删除的那一端。
栈底:固定的,不允许进行插入和删除的另一端。
空栈:不含任何元素的栈。
二、栈的基本操作所需函数
CreateStack(&S):初始化一个空栈S,创建一个头结点
IsEmpty(S):判断一个栈是否为空
Push(&S, x):判断进栈,把元素从栈顶插入栈
Pop(&S, &x):出栈,把元素从栈顶删除
GetTop(S, &x):读栈顶元素
DeStack(&S):栈销毁,释放栈占用的存储空间
特殊情况:
①Push(&S, x) 进栈时栈满,此时返回false
②Pop(&S, &x) 出栈时栈空,此时返回false
三、栈的两种表示
①顺序栈
栈的结构体代码
typedef struct Stack{
int data[100];
int top;
}st;
栈的初始化代码
void creatstack(st &S){
S.top = -1;
}
元素入栈代码
bool pushs(st &S,int x){
if(S.top == maxsize-1) return false;
else S.data[++S.top] = x;
return ture;
}
元素出栈代码
bool pops(st &S,int &x){
if(S.top==-1) return false;
x = S.data[S.top--];
return true;
}
元素判空代码
bool IsEmpty(st S){
if(S.top == -1) return true;
else return false;
}
栈清空代码
void DestroyStack(st &S){
if(S.top==-1)
return false;
free(S.data);
return true;
}
②链栈
栈的结构体代码
typedef struct stac{
struct stac *next;
int data;
}*st,stnode;
栈的初始化代码
void CreateStack(st S){
S = new stnode;
S->next = NULL;
}
元素插入栈顶代码
void pushs(st S,int a){
st p;
p = new stnode;
p->data = a;
p->next = S->next;
S->next = p;
}
元素弹出代码
void pops(st S){
st p;
p = new stnode;
p = S->next;
S->next = p->next;
free(p);
}
栈取顶元素代码
int tops(st S){
return S->next->data;
}
栈销毁代码
void DeStack(st S){
st *p,*q;
p = S->next;
while(p){
q = p->next;
delete p;
p = q;
}
S->next = NULL;
}
栈判空代码
bool IsEmpty(S){
if(S->next == NULL) return false;
else return true;
}