#include <stdio.h>
#include <stdlib.h>
// 定义结点数据类型
typedef struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
}LNode, *LiStack;
// 初始化链栈(带头结点)
void initLiStack(LiStack &S) {
S = (LNode *)malloc(sizeof(LNode));
S->next = NULL;
}
// 判断栈空
bool isEmpty(LiStack S) {
if(S->next == NULL)
return true;
return false;
}
// 入栈(头插法LIFO)
void push(LiStack &S, int e) {
LNode *p = (LNode *)malloc(sizeof(LNode));
p->data = e;
p->next = S->next;
S->next = p;
}
// 出栈
bool pop(LiStack &S, int &e) {
if(isEmpty(S))
return false;
LNode *p = S->next;
e = p->data;
S->next = p->next;
free(p);
return true;
}
// 读栈顶元素
bool getTop(LiStack S, int &e) {
if(isEmpty(S))
return false;
e = S->next->data;
return true;
}
int main(void) {
LiStack S;
initLiStack(S);
push(S, 1);
push(S, 2);
push(S, 3);
push(S, 4);
int e = -1;
if(pop(S, e))
printf("出栈元素:%d\n", e);
if(pop(S, e))
printf("出栈元素:%d\n", e);
if(pop(S, e))
printf("出栈元素:%d\n", e);
if(pop(S, e))
printf("出栈元素:%d\n", e);
if(isEmpty(S))
printf("栈已空\n");
system("pause");
return 0;
}