1.顺序栈类型描述
#include<stdio.h>
#include<malloc.h>
#define Maxsize 50//定义栈中最大元素的个数
typedef struct {
int data[Maxsize];//存放栈中元素
int top;//栈顶指针
}SqStack;
2.初始化顺序栈
void InitStack(SqStack&S) {
S.top = -1; //初始化栈顶指针
}
3.销毁顺序栈
void DestroyStack(SqStack&S) {
free(&S);
}
4.判断栈是否为空
bool StackEmpty(SqStack S) {
if (S.top == -1)
return true;//栈空
else
return false;
}
5.新元素入栈
bool push(SqStack& S, int x) {
if (S.top == Maxsize - 1)//栈满 报错
return false;
S.data[++S.top] = x;
//S.top=S.top+1;指针先加1
//S.data[S.top]=x;新元素入栈
return true;
}
6.出栈操作
bool Pop(SqStack& S, int& x) {
if (S.top == -1)//栈空 报错
return false;
//x = S.data[S.top--];
//x=S.data[S.top];
//S.top=S.top-1;
return true;//先出栈 指针再减1
}
7.读栈顶元素
bool GetTop(SqStack S, int& x) {
if (S.top == -1)
return false;
x = S.data[S.top];//x记录栈顶元素
return true;
}
8.主函数
int main() {
int e;
SqStack h;
printf("初始化栈:");
InitStack(h);
printf("栈为%s\n", (StackEmpty(h) ? "空" : "非空"));
printf("输入元素\n");
push(h, 1);
push(h, 2);
push(h, 3);
push(h, 4);
push(h, 5);
printf("栈为%s\n", (StackEmpty(h) ? "空" : "非空"));
printf("出栈:\n");
while (!StackEmpty(h))
{
Pop(h, e);
printf("%d", e);
}
printf("\n");
printf("栈为%s\n", (StackEmpty(h) ? "空" : "非空"));
printf("释放栈");
DestroyStack(h);
return 0;
}