C语言数据结构实验二 栈和队列
时间: 2024-10-17 07:01:31 浏览: 57
在C语言中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们都是线性表,但在插入和删除元素的方式上有所不同。
1. **栈**:
- **定义**: 栈是一种后进先出(Last In, First Out, LIFO)的数据结构,类似于一叠书,新加入的元素放在顶部(称为“栈顶”),而最先放入的元素会被最后一个访问(即从顶部弹出)。
- **操作**: 主要有两个操作:
- `push()`: 向栈顶添加一个元素。
- `pop()`: 删除并返回栈顶元素。
- 示例代码(使用数组实现):
```c
#define MAX_SIZE 10
int stack[MAX_SIZE];
int top = -1;
void push(int item) {
if (top < MAX_SIZE - 1) {
top++;
stack[top] = item;
} else {
printf("Stack overflow!\n");
}
}
int pop() {
if (top >= 0) {
int item = stack[top];
top--;
return item;
} else {
printf("Stack underflow!\n");
return -1; // 返回错误值或处理异常
}
}
```
2. **队列**:
- **定义**: 队列是一种先进先出(First In, First Out, FIFO)的数据结构,就像排队等待服务一样,最先进来的元素总是第一个被服务(即从队尾加入,从队头删除)。
- **操作**: 主要有两个操作:
- `enqueue()`: 将元素添加到队列的末尾。
- `dequeue()`: 删除并返回队列头部的元素。
- 示例代码(同样使用数组实现):
```c
#define MAX_SIZE 10
int queue[MAX_SIZE];
int front = -1, rear = -1;
void enqueue(int item) {
if (rear == MAX_SIZE - 1) {
printf("Queue overflow!\n");
} else {
rear++;
if (front == -1) front = 0; // 如果队列为空,更新front
queue[rear] = item;
}
}
int dequeue() {
if (front != rear) {
int item = queue[front];
front++;
if (front == MAX_SIZE) front = 0; // 更新front,如果超过最大索引,重新开始计数
return item;
} else {
printf("Queue underflow!\n");
return -1;
}
}
```
阅读全文