栈 后进先出(Last In First Out)
使用C中的数组实现
存储二叉树节点的栈
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
struct node {
int data;
struct node *left;
struct node *right;
} node;
// 定义栈,栈的长度为100
struct node *stack[100];
// 栈顶计数
int top = -1;
//栈是否为空
int empty() {
if (top == -1) {
return 1;
}
return 0;
}
// 栈是否满了
int full() {
if (top == 99) {//数组从0开始
return 1;
}
return 0;
}
//入栈
struct node* push(struct node *node) {
if (!full()) {
stack[++top] = node;
return node;
} else {
printf("already full \n");
}
}
// 出栈
struct node *pop() {
if (!empty()) {
struct node *node = stack[top];
top--;
return node;
} else {
printf("stack is empty \n");
}
}
// 创建节点
struct node *createNode(int data) {
struct node* node = (struct node*)malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
int main() {
// 栈来实现 2,3,4,5
push(createNode(2));
push(createNode(3));
push(createNode(4));
push(createNode(5));
printf("%d\n", pop()->data);
printf("%d\n", pop()->data);
printf("%d\n", pop()->data);
printf("%d\n", pop()->data);
return 1;
}