用一组地址连续的存储单元存放栈元素,指针top指向栈顶
typedef struct {
ElemType data[MaxSize];
int top;
} SqStack;
栈顶指针初始值:S.top==-1
栈顶元素:S.data[S.top]
进栈操作:S.data[++S.top] = e
出栈操作:S.data[S.top--]
栈空判断条件:S.top == -1
栈满判断条件:S.top == MaxSize - 1;
栈的长度:S.top + 1;
具体操作
初始化
void InitStack(SqStack *S){
S.top=-1;
}
判断栈是否为空
bool StackEmpty(SqStack S){
if(S.top == -1) return true;
return false;
}
进栈
bool Push(SqStack *S, ElemType x){
if(S->top == MaxSize - 1) return false;
S->data[++S->top] = x;
return true;
}
出栈
bool Pop(SqStack *S, ElemType *x){
if(S->top == -1) return false;
x = S->data[S->top--];
return true;
}
取栈顶元素
bool GetTop(SqStack S, ElemType *x){
if(S->top == -1) return false;
x = S->data[S->top];
return true;
}
链栈,其实就是单链表,只不过多了一个指针指向头结点
链栈使用单链表表示,不设头结点,Lhead表示栈顶指针
typedef struct LNode {
ElemType data;
struct LNode *next;
}LNode, *LinkList;
typedef struct {
LinkList list;
LNode head;
} LStack;