#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
typedef int ElemType;
typedef int bool;
typedef struct LinkNode {
ElemType data;
struct LinkNode* next;
}LinkNode,*LinkStack;
//初始化栈
bool InitStack(LinkStack *S) {
*S = (LinkStack)malloc(sizeof(LinkNode));
if (*S == NULL) {
return false;
}
(*S)->data = -842150451;
(*S)->next = NULL;
return true;
}
//压栈
void Push(LinkStack S,ElemType e) {
if (S->data == -842150451) {
S->data = e;
return true;
}
LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode));
p->data = S->data;
p->next = S->next;
S->next = p;
S->data = e;
return true;
}
//弹栈
bool Pop(LinkStack *S,ElemType *e) {
if (IsEmpty(S)) {
return false;
}
if ((*S)->next == NULL) {
*e = (*S)->data;
(*S) = NULL;
return true;
}
*e = (*S)->data;
LinkNode* p= (*S)->next;
(*S)->data = p->data;
(*S)->next = p->next;
free(p);
return true;
}
//获取栈顶元素
bool GetTop(LinkStack S, ElemType* e) {
if (IsEmpty(S)) {
return false;
}
*e = S->data;
return true;
}
//判断栈空
bool IsEmpty(LinkStack S) {
if (S== NULL) {
return true;
}
return false;
}
//销毁栈
bool Destroy(LinkStack S) {
if (IsEmpty(S)) {
return false;
}
while (S) {
LinkNode* p = S;
S = p->next;
free(p);
}
return true;
}
//测试
int main() {
LinkStack S;
InitStack(&S);
for (int i = 1; i < 5; i++) {
Push(S, i);
}
ElemType e;
Pop(&S, &e);
GetTop(S, &e);
printf("%d\n", e);
while (S!=NULL) {
Pop(&S, &e);
printf("%d\n", e);
}
Destroy(S);
system("pause");
return 0;
}