C 语言中的栈和队列总结
在 C 语言中,**栈(Stack)和队列(Queue)**是两种非常重要的数据结构。它们广泛用于各种应用中,比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介绍,并展示如何在 C 语言中实现它们。
1. 栈(Stack)
栈是一种先进后出(LIFO,Last In First Out)数据结构,类似于一摞盘子,最后放上去的盘子最先被拿下来。

1.1 栈的特点
- 先进后出(LIFO):最后入栈的元素最先出栈。
- 单端操作:栈的插入和删除操作都发生在栈顶。
1.2 栈的基本操作
- 压栈(Push):将元素压入栈顶。
- 弹栈(Pop):从栈顶移除元素。
- 查看栈顶元素(Peek/Top):获取栈顶元素但不删除它。
- 判断栈是否为空(isEmpty)。
1.3 栈的实现方式
栈可以通过数组或链表来实现。以下分别讨论栈的数组实现和链表实现。
1.3.1 使用数组实现栈
以下是用 C 语言实现栈的数组版:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct Stack {
int items[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack* stack) {
stack->top = -1;
}
// 判断栈是否为空
bool isEmpty(Stack* ) {
->top == ;
}
{
->top == MAX_SIZE - ;
}
{
(isFull()) {
();
;
}
->items[++->top] = value;
(, value);
}
{
(isEmpty()) {
();
;
}
->items[->top--];
}
{
(isEmpty()) {
();
;
}
->items[->top];
}
{
(isEmpty()) {
();
;
}
( i = ; i <= ->top; i++) {
(, ->items[i]);
}
();
}
{
Stack ;
initStack(&);
push(&, );
push(&, );
push(&, );
();
traverseStack(&);
(, pop(&));
(, peek(&));
();
traverseStack(&);
;
}


