初始化一个栈:InitStack
销毁一个栈:DestroyStack
清空一个栈:ClearStack
判断一个栈是否为空:StackIsEmpty
返回栈中元素个数,即栈的长度:StackLength
入栈,把一个元素加入到栈中:Push
出栈,把栈顶元素给干掉:Pop
返回栈顶元素,但不出栈:GetTop
一,顺序栈的实现:
顺序栈的定义:
# 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 true; //栈空
}
else{
return false; //不为空
}
}
入栈:
//新元素入栈
bool Push(SqStack &S, ElemType x){
if(S.top == MaxSize-1){ //表示栈满了
return false;
}
S.top = S.top + 1; //指针先加一
S.data[S.top] = x; //新元素入栈
return true;
}
出栈:
//出栈操作
bool Pop(SqStack &S, ElemType &x){
if(S.top == -1){ //栈空,报错
return false;
}
x = S.data[S.top]; //栈顶元素先出栈
S.top = S.top - 1; //指针再减1
return true;
}
读取栈顶元素:
//读取栈顶元素
bool GetTop(SqStack &S, ElemType &x){
if(S.top == -1){ //栈空,报错
return false;
}
x = S.data[S.top]; //记录栈顶元素
return true;
}
初始时设置:s.top=-1(不唯一)
栈顶元素:s.data[s.top];
栈空条件:s.top=-1
栈满条件:s.top=Maxsize-1
栈长:s.top+1
二,链栈的实现:
typedef struct Linknode{
ElemType data; //数据域
struct Linknode *next; //指针域
}LiStack; //栈类型定义
采用链式存储,便于结点的插入和删除。链栈的操作与链表类似。
对于链栈的基本操作来说,和单链表的插入删除很类似,所以就不在讨论。