使用C语言模拟出容器Queue,包含insert,del函数等,用来存储多个数组
时间: 2024-10-22 12:04:59 浏览: 24
C语言实现使用静态数组.zip
在C语言中,我们可以创建一个简单的队列数据结构(Queue),通常会使用链表实现,因为数组插入和删除操作效率不高。这里我们将描述一种基本的队列设计,使用双向链表,并提供`enqueue`(插入)和`dequeue`(删除)操作。
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构
typedef struct Node {
int data;
struct Node* next;
struct Node* prev;
} Node;
// 队列结构体
typedef struct Queue {
Node* front; // 队头指针
Node* rear; // 队尾指针
int size;
} Queue;
// 初始化队列
Queue* init_queue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = NULL;
q->rear = NULL;
q->size = 0;
return q;
}
// 插入元素到队尾
void enqueue(Queue* q, int value) {
if (!q->rear) { // 如果队列为空,设置front和rear
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
newNode->prev = NULL;
q->front = newNode;
q->rear = newNode;
} else {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = q->rear;
newNode->prev = q->rear->prev;
q->rear->prev->next = newNode;
q->rear->prev = newNode;
++q->size;
}
}
// 删除并返回队首元素
int dequeue(Queue* q) {
if (q->front == NULL) {
printf("Error: Queue is empty.\n");
return -1; // 返回错误代码
}
Node* temp = q->front;
int removedValue = temp->data;
q->front = q->front->next;
if (q->front) {
q->front->prev = NULL;
} else {
q->rear = NULL;
}
free(temp);
--q->size;
return removedValue;
}
// 打印队列内容
void print_queue(Queue* q) {
Node* curr = q->front;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
int main() {
Queue* queue = init_queue();
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
printf("Queue elements before deletion:\n");
print_queue(queue);
int removed = dequeue(queue);
printf("Dequeued element: %d\n", removed);
printf("Queue elements after deletion:\n");
print_queue(queue);
return 0;
}
```
这个简单的队列实现了基本的插入和删除操作,但在实际应用中,你可能需要考虑更多的边界条件和异常处理。
阅读全文