栈(Stack)和队列(Queue)是两种基本的数据结构,它们在计算机科学中有着广泛的应用。下面是它们的主要功能、应用范围以及C语言的简单实现代码。
一、栈(Stack)
主要功能:
- 栈是一种后进先出(Last In First Out, LIFO)的数据结构。
- 它允许在一端(栈顶)进行数据的插入和删除操作。
应用范围:
- 函数调用的内存管理。
- 表达式求值,如算术表达式或逆波兰表达式。
- 回溯算法,如迷宫求解、八皇后问题。
- 括号匹配检查。
C语言实现代码示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void InitializeStack(Stack *s) {
s->top = -1;
}
int IsEmpty(Stack s) {
return s.top == -1;
}
void Push(Stack *s, int x) {
if (s->top < MAX_SIZE - 1) {
s->top++;
s->data[s->top] = x;
}
}
int Pop(Stack *s) {
if (!IsEmpty(*s)) {
return s->data[s->top--];
}
return -1; // 错误代码,表示栈为空
}
int main() {
Stack s;
InitializeStack(&s);
Push(&s, 10);
Push(&s, 20);
printf("Popped element: %d\n", Pop(&s));
printf("Popped element: %d\n", Pop(&s));
return 0;
}
二、队列(Queue)
主要功能:
- 队列是一种先进先出(First In First Out, FIFO)的数据结构。
- 它允许在一端(队尾)进行数据的插入操作,在另一端(队首)进行数据的删除操作。
应用范围:
- 任务调度,如打印机任务队列。
- 广度优先搜索(BFS)算法。
- 模拟现实世界中的排队行为,如超市结账。
C语言实现代码示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void InitializeQueue(Queue *q) {
q->front = 0;
q->rear = 0;
}
int IsEmpty(Queue q) {
return q.front == q.rear;
}
int IsFull(Queue q) {
return (q.rear + 1) % MAX_SIZE == q.front;
}
void Enqueue(Queue *q, int x) {
if (!IsFull(*q)) {
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
}
}
int Dequeue(Queue *q) {
if (!IsEmpty(*q)) {
int x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return x;
}
return -1; // 错误代码,表示队列为空
}
int main() {
Queue q;
InitializeQueue(&q);
Enqueue(&q, 10);
Enqueue(&q, 20);
printf("Dequeued element: %d\n", Dequeue(&q));
printf("Dequeued element: %d\n", Dequeue(&q));
return 0;
}