#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) {
LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode));
p->data = e;
p->next = S->next;
S->next = p;
return true;
}
//弹栈
bool Pop(LinkStack S, ElemType* e) {
if (IsEmpty(S)) {
return false;
}
*e = S->next->data;
LinkNode* p = S->next;
S->next = p->next;
free(p);
return true;
}
//获取栈顶元素
bool GetTop(LinkStack S, ElemType* e) {
if (IsEmpty(S)) {
return false;
}
*e = S->next->data;
return true;
}
//判断栈空
bool IsEmpty(LinkStack S) {
if (S->next == 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 (!IsEmpty(S)) {
Pop(S, &e);
printf("%d\n", e);
}
Destroy(S);
system("pause");
return 0;
}