#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct LinkStack {
datatype data;
struct LinkStack* next;
}LinkStack;
LinkStack* InitStack() {
LinkStack* top;
top = NULL;
printf("初始化成功\n");
return top;
}
int EmptyStack(LinkStack* top) {
if (top == NULL)
return 1;
else
return 0;
}
void GetTop(LinkStack* top) {
LinkStack* p;
p = (LinkStack*)malloc(sizeof(LinkStack));
p = top;
if (EmptyStack(p)) {
printf("栈空\n");
}
else {
printf("栈顶元素为%d\n", p->data);
}
}
LinkStack* Push(LinkStack top) {
LinkStack p;
p = (LinkStack*)malloc(sizeof(LinkStack));
if(p){
printf("请输入数据:\n");
scanf_s("%d", &p->data);
p->next = top;
top = p;
printf("进栈成功\n");
GetTop(top);
return top;
}
}
LinkStack* Pop(LinkStack* top) {
LinkStack* p;
if (EmptyStack(top)) {
printf("栈空\n");
return NULL;
}
else {
p = top;
top = top->next;
free(p);
printf("出栈成功\n");
return top;
}
}
void ShowStack(LinkStack* top) {
LinkStack* p;
if (EmptyStack(top)) {
printf("栈为空\n");
}
else {
p = top;
printf("栈顶到栈底元素为:\n");
while (p) {
printf("%d ",p->data);
p = p->next;
}
}
}
int main() {
LinkStack* top;
top = (LinkStack*)malloc(sizeof(LinkStack));
InitStack();
EmptyStack(top);
Push(top);
Push(top);
ShowStack(top);
EmptyStack(top);
Pop(top);
ShowStack(top);
return 0;
}