顺序栈
代码有问题欢迎指出
#include<stdio.h>
#define MaxSize 10
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int top;
}SqStack;
int a;
//初始化栈
void InitStack(SqStack&);
//判断栈空
bool StackEmpty(SqStack);
//判断栈满
bool StackFull(SqStack);
//压栈
bool Push(SqStack&, ElemType);
//出栈
bool Pop(SqStack&, ElemType&);
//栈顶元素
bool GetTop(SqStack, ElemType&);
void Traverse(SqStack);
int main(void) {
SqStack S;
InitStack(S);
bool flag = StackEmpty(S);
if (flag) {
printf("栈空!\n");
}
for (int i = 1; i <= 15; i++) {
flag = Push(S, i);
if (!flag) {
printf("栈满!\n");
break;
}
}
Traverse(S);
ElemType x;
flag = GetTop(S, x);
printf("栈顶元素:%d\n", x);
for (int i = 1; i <= 15; i++) {
flag = Pop(S, x);
if (!flag) {
printf("\n栈空!\n");
break;
}
printf("%d\t", x);
}
return 0;
}
void InitStack(SqStack& S) {
S.top = -1;
}
bool StackEmpty(SqStack S) {
return S.top == -1;
}
bool StackFull(SqStack S) {
return S.top + 1 == MaxSize;
}
bool Push(SqStack& S, ElemType x) {
if (StackFull(S)) {
return false;
}
S.data[++S.top] = x;
return true;
}
bool Pop(SqStack& S, ElemType& x) {
if (StackEmpty(S)) {
return false;
}
x = S.data[S.top--];
return true;
}
bool GetTop(SqStack S, ElemType& x) {
if (StackEmpty(S)) {
return false;
}
x = S.data[S.top];
return true;
}
void Traverse(SqStack S) {
if (StackEmpty(S)) {
printf("栈空!\n");
return;
}
int top = S.top;
while (top >= 0) {
printf("%d\t", S.data[top--]);
}
printf("\n");
}