#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;
}
修改处见注释,供参考:
#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));
p->next = NULL; //修改
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));//修改
top = InitStack(); //修改
EmptyStack(top);
top = Push(top); //修改
top = Push(top); //修改
ShowStack(top);
EmptyStack(top);
top = Pop(top);// Pop(top);//修改
ShowStack(top);
return 0;
}