#include <iostream>
// 1.2 链栈的实现(为熟悉单链表再写一遍)
// Tip
// (1) 链栈其实就是受限的单链表
// (2) 对于入栈操作,就是在单链表头节点之后执行节点插入操作
// (3) 对于出栈操作,就是删除第一个节点操作
// 结构体包括 节点指针、数据元素
typedef struct LNode{
int data;
LNode *next;
}*Stack;
// 初始化包括 创建头节点并让指针指向头节点
bool init_stack(Stack &stack){
stack = (Stack) malloc(sizeof(LNode));
if (stack == NULL){ // 空间不足返回NULL
return false;
}
stack->next = NULL;
}
// 入栈,即对头节点使用尾插法
bool push(Stack &stack, int ele){
if (stack == NULL){
return false;
}
LNode *pt = (LNode*) malloc(sizeof (LNode));
pt->data = ele;
pt->next = stack->next;
stack->next = pt;
return true;
}
// 出栈,即对第一个节点进行删除操作, 删除前判断是否为空是必要的
bool pop(Stack &stack, int &ele){
if (stack->next==NULL) {
return false;
}
LNode *pt = stack->next;
ele = pt->data;
stack->next = pt->next;
free(pt);
return true;
}
int main() {
Stack stack;
init_stack(stack);
push(stack,29);
push(stack,18);
push(stack,15);
int ele = 2;
pop(stack,ele);
printf("%d\t",ele);
pop(stack,ele);
printf("%d\t",ele);
pop(stack,ele);
printf("%d\t",ele);
return 0;
}