c语言分别实现栈和队列,以及它们各自的一个应用
时间: 2024-10-09 16:07:58 浏览: 43
纯C语言实现如各自排序、链表、栈、队列、各种树以及应用、图算法、字符串匹配算法、回溯、并查集等
在C语言中,我们可以使用数组或动态内存分配来实现栈(Stack)和队列(Queue)。这里我会简单介绍如何使用数组实现这两种数据结构,并给出一个应用场景示例。
**栈(Stack)**
栈是一种“先进后出”(Last In First Out,LIFO)的数据结构。在C语言中,可以使用数组的下标来模拟操作:
```c
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack* stack) {
stack->top = -1;
}
// 入栈(push)
void push(Stack* stack, int value) {
if (stack->top < MAX_SIZE - 1) {
stack->data[++stack->top] = value;
} else {
printf("Stack overflow!\n");
}
}
// 出栈(pop)
int pop(Stack* stack) {
if (stack->top >= 0) {
return stack->data[stack->top--];
} else {
printf("Stack underflow!\n");
return -1; // 返回一个默认值或错误标识
}
}
// 应用场景:函数调用的递归或回溯
```
**队列(Queue)**
队列是一种“先进先出”(First In First Out,FIFO)的数据结构。同样,我们可以用数组来实现:
```c
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front, rear;
} Queue;
// 初始化队列
void init(Queue* queue) {
queue->front = queue->rear = -1;
}
// 入队(enqueue)
void enqueue(Queue* queue, int value) {
if (queue->rear + 1 != queue->front) {
if (queue->rear == -1) queue->front = 0;
queue->data[++queue->rear] = value;
} else {
printf("Queue overflow!\n");
}
}
// 出队(dequeue)
int dequeue(Queue* queue) {
if (queue->front != -1) {
int temp = queue->data[queue->front++];
if (queue->front == queue->MAX_SIZE) queue->front = 0;
return temp;
} else {
printf("Queue underflow!\n");
return -1; // 返回默认值或错误标识
}
}
// 应用场景:操作系统任务调度、消息传递等
```
阅读全文