用C语言编写程序队列的基本算法实现:采用不损失空间的方法。
时间: 2024-09-29 21:02:24 浏览: 35
在C语言中,实现一个不损失空间的队列(通常称为循环队列或环形缓冲区),可以利用数组结构和索引来达到这个目标。以下是基本的步骤:
1. 定义数据结构:
```c
typedef struct {
int front; // 队头元素的位置
int rear; // 队尾元素的位置
int capacity; // 队列容量
int* queue; // 存储数据的数组
} Queue;
```
2. 初始化队列:
```c
Queue q = {0, 0, CAPACITY, (int*)malloc(CAPACITY * sizeof(int))};
```
3. 入队(enqueue)操作:
- 检查是否已满:如果 `rear == (front + COUNT - 1) % CAPACITY`,说明队列已满
- 否则,将元素存入 `queue[rear]` 并更新 rear(先进后出)
```c
void enqueue(Queue* q, int value) {
if (q->rear == (q->front + QUEUE_SIZE - 1) % q->capacity) {
printf("Queue is full.\n");
} else {
q->queue[q->rear] = value;
q->rear = (q->rear + 1) % q->capacity;
}
}
```
4. 出队(dequeue)操作:
- 检查是否为空:如果 `front == rear`,说明队列为空
- 否则,返回并移除 `queue[front]` 更新 front
```c
int dequeue(Queue* q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return -1;
} else {
int value = q->queue[q->front];
q->front = (q->front + 1) % q->capacity;
return value;
}
}
```
5. 队列长度检查:
```c
int size(Queue* q) {
if (q->front > q->rear)
return q->front - q->rear;
else
return q->capacity - q->rear + q->front;
}
```
阅读全文