栈的抽象数据类型定义
顺序栈的表示和实现
#define MAXSIZE 100
typedef struct {
SElemType* base;
SElemType* top;
int stacksize;
}SqStack;
顺序栈的初始化
Status InitStack(SqStack& S) {//SqStack类型,名字叫S,构造了一个空栈
S.base = new SElemType[MAXSIZE];
if (!S.base) exit(OVERFLOW);//判断内存是否分配成功
S.top = S.base;
S.satcksize = MAXSIZE;
return OK;
}
求顺序栈长度
int StackLength(SqStack S) {
return S.top - S.base;
}
清空顺序栈
销毁顺序栈
Status DestroyStack(SqStack S) {
if (S.base) {
delete S.base;
S.stacksize = 0;
S.base = S.top = NULL;
}
return OK;
}
算法一 顺序栈的入栈
算法二 顺序栈的出栈
链栈
链栈是运算受限的单链表,只能在链表头部进行操作。
typedef struct StackNode {
SElemType data;
struct StackNode* next;
}StackNode,*LinkStack;
LinkStack S;
顺序栈的入栈
//链栈初始化
void InitStack(LinkStack& S) {
//构造一个空栈,栈顶指针置为空
S = NULL;
return OK;
}
//判断链栈是否为空
Status StackEmpty(LinikStack S) {
if (S == NULL)return TRUE;
else return FALSE;
}
取栈顶元素