c语言在顺序队列的基础上实现链式队列
时间: 2024-10-22 10:20:54 浏览: 17
C语言中,顺序队列通常基于数组实现,而链式队列则通过节点结构体来管理数据。链式队列的主要优点是可以动态地增加或减少元素,不需要预先指定容量。下面是一个简单的链式队列(双向队列)的实现:
```c
// 队列节点结构体
typedef struct Node {
void* data; // 存储的数据
struct Node* next; // 指向下一个节点
} QueueNode;
// 链式队列结构体
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
int size; // 队列大小
} Queue;
// 初始化函数
Queue* queue_init() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = NULL;
q->rear = NULL;
q->size = 0;
return q;
}
// 入队操作
void enqueue(Queue* q, void* data) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
if (q->rear == NULL) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
q->size++;
}
// 出队操作
void* dequeue(Queue* q) {
if (q->front == NULL) {
printf("Queue is empty.\n");
return NULL;
}
void* data = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
q->size--;
return data;
}
// 查看队列是否为空
int is_empty(Queue* q) {
return q->size == 0;
}
// 查看队列是否满
int is_full(Queue* q, int capacity) {
// 这里假设固定容量,如果是动态扩容的队列,应忽略capacity参数
return q->size >= capacity;
}
阅读全文