C语言中创建一个队列并给它赋值并输出,以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点(不设队头指针)
时间: 2024-11-22 12:36:24 浏览: 3
C只有尾指针的循环队列(数据结构作业)
在C语言中,我们可以使用结构体和单链表来创建一个带循环的队列,仅使用一个指针`rear`指向队尾。这里是一个简单的例子:
首先,我们定义一个`Node`结构体来表示链表节点,以及一个`Queue`结构体用于表示队列。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 定义队列结构
typedef struct Queue {
Node* rear; // 只有一个指针指向队尾
} Queue;
// 初始化队列为空
void initialize(Queue* q) {
q->rear = NULL;
}
// 向队尾添加元素
void enqueue(Queue* q, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = q->rear; // 新建节点的next指向前一个节点
if (q->rear != NULL) {
q->rear->next = newNode; // 如果队列非空,更新当前队尾的next
} else {
newNode->next = newNode; // 队列为空,形成环形
}
q->rear = newNode; // 更新队尾指针
}
// 输出队列内容(假设队列大小小于等于5)
void print_queue(Queue* q) {
for (int i = 0; q->rear != NULL && i < 5; i++) { // 循环直到队尾为空
printf("%d ", q->rear->data);
q->rear = q->rear->next; // 移动到下一个节点
}
printf("\n");
}
int main() {
Queue queue;
initialize(&queue);
// 添加元素示例
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
// 输出队列
print_queue(&queue);
return 0;
}
```
阅读全文