用c语言自己设计一段代码,要求实现队列的基本操作
时间: 2024-10-27 08:08:09 浏览: 26
在C语言中,我们可以手动创建一个简单的链式队列来实现基本的操作,包括入队(enqueue)、出队(dequeue)以及查看队头元素(front)。这里是一个基础的单向链表队列实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 定义队列结构体
typedef struct {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
int size; // 队列大小
} Queue;
// 初始化队列
Queue* create_queue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
return queue;
}
// 入队操作(在队尾添加节点)
void enqueue(Queue* queue, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) { // 如果队列为空,同时更新front和rear
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode; // 更新rear指针
}
queue->size++;
}
// 出队操作(删除并返回队首节点)
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Error: Queue is empty.\n");
return -1; // 队列为空处理
}
QueueNode* temp = queue->front;
int removedValue = temp->data;
queue->front = queue->front->next; // 移除队首节点
if (queue->front == NULL) {
free(temp); // 如果队列变为空,释放当前节点
queue->rear = NULL;
} else {
queue->size--;
}
return removedValue;
}
// 查看队头元素
int get_front(Queue* queue) {
if (queue->front == NULL) {
printf("Error: Queue is empty.\n");
return -1; // 队列为空处理
}
return queue->front->data;
}
// 示例使用
int main() {
Queue* q = create_queue();
enqueue(q, 1);
enqueue(q, 2);
enqueue(q, 3);
printf("Front element: %d\n", get_front(q)); // 输出:Front element: 1
int removedValue = dequeue(q);
printf("Removed value: %d\n", removedValue); // 输出:Removed value: 1
return 0;
}
```
阅读全文