建立顺序队列并用C语言实现入队出队操作
时间: 2024-11-13 22:24:26 浏览: 30
在C语言中,我们可以使用数组或链表数据结构来实现一个基本的顺序队列(First-In-First-Out,FIFO)。这里我将演示如何使用数组实现。
首先,我们需要定义一个队列结构体,包含一个整型数组作为存储空间以及两个索引变量:`front`表示队首元素的位置,`rear`表示最后一个添加元素的位置。当`front`等于`rear`时,队列为空;当`front`小于`rear`时,队列非空。
```c
typedef struct {
int capacity; // 队列容量
int size; // 当前元素个数
int* data; // 存储数据的数组
} Queue;
```
接下来,我们提供队列的基本操作:
1. **初始化** (`init_queue`):创建一个新的队列,并设置初始状态。
```c
void init_queue(Queue* queue, int capacity) {
queue->capacity = capacity;
queue->size = 0;
queue->data = (int*)malloc(capacity * sizeof(int));
}
```
2. **入队** (`enqueue`):向队尾添加一个元素。
```c
void enqueue(Queue* queue, int value) {
if (queue->size == queue->capacity) {
printf("Queue is full.\n");
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % queue->capacity; // 保持循环
queue->size++;
}
```
3. **出队** (`dequeue`):从队头移除并返回一个元素。
```c
int dequeue(Queue* queue) {
if (queue->size == 0) {
printf("Queue is empty.\n");
return -1; // 或者抛出异常
}
int value = queue->data[queue->front];
queue->data[queue->front] = -1; // 简化处理,实际应用应删除元素
queue->front = (queue->front + 1) % queue->capacity;
queue->size--;
return value;
}
```
注意:这里简化了处理,实际上需要更新元素位置以避免内存泄漏。在`dequeue`操作完成后,应该释放已经被标记的队头元素的空间。
阅读全文