使用C语言模拟出容器Queue,包含insert,del函数等,用来存储数组
时间: 2024-10-22 21:05:13 浏览: 19
在C语言中,我们可以创建一个简单的队列(Queue)数据结构来存储数组,通常会采用链表作为底层的数据结构,因为数组的插入和删除操作在两端会有性能限制。这里我们先定义一个Node结构体表示队列节点,然后创建Queue结构体和对应的操作函数。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int data; // 节点值
struct Node* next; // 指向下一个节点的指针
} Node;
// 队列结构体
typedef struct Queue {
Node* front; // 队头指针
Node* rear; // 队尾指针
} Queue;
// 初始化队列
Queue* initQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
queue->rear = NULL;
return queue;
}
// 插入元素到队列尾部
void enqueue(Queue* queue, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) { // 如果队列为空
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 从队列头部删除并返回元素
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Queue is empty.\n");
return -1; // 队列空处理
}
int removedValue = queue->front->data;
Node* temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp); // 释放已删除节点
return removedValue;
}
// 显示队列内容
void display(Queue* queue) {
Node* current = queue->front;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Queue* queue = initQueue();
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
display(queue);
int removed = dequeue(queue);
printf("Removed: %d\n", removed);
display(queue);
return 0;
}
```
这个程序展示了如何使用C语言创建一个基本的Queue结构,包括初始化、插入(enqueue)、删除(dequeue)以及查看当前队列内容的功能。运行`main`函数可以看到队列的操作效果。
阅读全文