3.25 Write the routines to implement queues using (使用C语言) a. linked lists b. arrays
时间: 2024-10-09 17:16:46 浏览: 6
在C语言中,我们可以使用两种数据结构——链表(Linked Lists)和数组(Arrays)来实现队列(Queue)。以下是各自的实现方法:
**a. 队列使用链表实现(Linked List)**
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} QueueNode;
// 创建一个空队列
QueueNode* createQueue() {
return NULL;
}
// 在队列尾部添加元素
void enqueue(QueueNode** head, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 从队列头部移除并返回元素
int dequeue(QueueNode** head) {
if (*head == NULL) {
printf("Queue is empty.\n");
return -1;
}
int value = (*head)->data;
QueueNode* temp = *head;
*head = (*head)->next;
free(temp);
return value;
}
// 主函数演示使用
int main() {
QueueNode* queue = createQueue();
// 添加元素...
// 删除元素...
return 0;
}
```
**b. 队列使用数组实现(Array)**
```c
#include <stdio.h>
#define MAX_SIZE 10
// 结构化数组表示队列
typedef struct {
int items[MAX_SIZE];
int front; // 标记队首
int rear; // 标记队尾
} QueueArray;
// 初始化一个空队列
QueueArray initQueue() {
QueueArray q = { .front = -1, .rear = -1 };
return q;
}
// 在队尾添加元素
void enqueue(QueueArray* q, int value) {
if (q->rear + 1 == MAX_SIZE) {
printf("Queue is full.\n");
return;
}
q->items[++q->rear] = value;
if (q->front == -1)
q->front = 0;
}
// 从队首移除并返回元素
int dequeue(QueueArray* q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return -1;
}
int value = q->items[q->front++];
return value;
}
// 主函数演示使用
int main() {
QueueArray queue = initQueue();
// 添加元素...
// 删除元素...
return 0;
}
```
注意:数组队列通常用于固定大小的情况,如果需要动态扩容,可以考虑使用动态内存分配。