源码
#include<stdio.h>
#include<stdlib.h>
#define bool char
#define false 0
#define true 1
#define MaxSize 100
typedef int ElemType;
typedef struct {
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
bool InitStack(SqStack *S) {
S->base = (ElemType*) malloc(MaxSize * sizeof(ElemType));
if(!S->base) {
printf("创建空栈失败!\n");
exit(0);
}
S->top = S->base;
S->stacksize = MaxSize;
return true;
}
bool Empty(SqStack *S) {
if (S->top == S->base) return true;
else return false;
}
bool Push(SqStack *S, ElemType e) {
if (S->top - S->base == MaxSize) {
printf("栈满!不能再入栈!\n");
return false;
}
*S->top = e;
S->top++;
return true;
}
bool Pop(SqStack *S, ElemType *e) {
if (Empty(S)) {
return false;
};
S->top--;
*e = *S->top;
return true;
}
ElemType GetTop(SqStack S) {
if (S.top != S.base)
return *(S.top-1);
}
int GetLength(SqStack *S) {
if (S->base == NULL) {
printf("栈为空!\n");
return 0;
}
return S->top - S->base;
}
bool PrintStack(SqStack *S) {
if (Empty(S)) return false;
ElemType *p;
p = S->top;
while (p != S->base) {
p--;
printf("%d\n", *p);
}
return true;
}
int main() {
SqStack *S;
SqStack s;
S = &s;
int chooseNumber;
int elem;
bool ans;
int length;
InitStack(S);
printf("容量为100的空栈建立成功!\n");
while (1) {
printf("******************************\n");
printf("请操作:\n");
printf("1(Push):入栈\n");
printf("2(Pop):出栈\n");
printf("3(Get):取栈顶元素\n");
printf("4(Empty):判断是否为空\n");
printf("5(Length):获取栈的长度\n");
printf("6.(Print):输出栈\n");
printf("0(exit):退出程序\n");
printf("******************************\n");
scanf("%d", &chooseNumber);
switch (chooseNumber) {
case 1:
printf("请输入入栈元素:\n");
scanf("%d", &elem);
Push(S, elem);
printf("入栈成功!\n");
break;
case 2:
ans = Pop(S, &elem);
if (ans) printf("出栈成功!出栈元素为%d\n",elem);
else printf("栈空!不能再出栈!\n");
break;
case 3:
if (Empty(S)) {
printf("栈为空!不能再取栈首元素!\n");
break;
}
elem = GetTop(*S);
printf("栈首元素为:%d\n", elem);
break;
case 4:
ans = Empty(S);
if (ans) printf("栈为空!\n");
else printf("栈非空!\n");
break;
case 5:
length = GetLength(S);
printf("当前栈的长度为%d\n", length);
break;
case 6:
ans = PrintStack(S);
if (ans) printf("当前栈元素如下:\n");
else printf("栈为空!无输出!\n");
break;
case 0:
exit(0);
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
}
return 0;
}