用C语言写一份向环形队列中增加数据,并输出
时间: 2024-12-02 12:14:04 浏览: 9
在C语言中,我们可以使用结构体和指针来实现环形队列。首先,定义一个队列节点结构体,包含数据和指向下一个节点的指针:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,我们需要定义环形队列的结构体,包含队头和队尾指针:
```c
typedef struct CircularQueue {
Node* front; // 队头指针
Node* rear; // 队尾指针
int capacity; // 队列容量
} CircularQueue;
```
接下来,我们创建函数用于初始化队列、入队(增加数据)、以及查看队列是否为空:
```c
// 初始化空队列
void initCircularQueue(CircularQueue* cq, int capacity) {
cq->front = cq->rear = NULL;
cq->capacity = capacity;
}
// 入队操作 (假设cq->rear不是NULL)
void enqueue(CircularQueue* cq, int value) {
if (cq->rear == NULL || cq->rear->next == cq->front) { // 满队或首次插入
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = cq->front; // 创建环形连接
cq->front = newNode;
cq->rear = newNode;
} else {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = cq->front->next;
cq->front->next = newNode;
cq->rear = newNode;
}
}
// 查看队列是否为空
int isQueueEmpty(const CircularQueue* cq) {
return cq->front == NULL;
}
```
为了输出队列内容,你需要遍历整个队列,但由于它是环形的,需要特殊处理队头和队尾之间的边界:
```c
// 输出队列数据
void printCircularQueue(const CircularQueue* cq) {
if (isQueueEmpty(cq)) {
printf("队列为空\n");
} else {
Node* currentNode = cq->front;
do {
printf("%d ", currentNode->data);
currentNode = currentNode->next;
} while (currentNode != cq->front && currentNode != cq->rear); // 如果还没到队尾,继续;如果到了队尾则跳回队头
printf("\n"); // 打印换行符
}
}
```
现在你可以按照这个结构来创建环形队列并添加数据了。例如:
```c
int main() {
CircularQueue cq;
initCircularQueue(&cq, 5); // 假设队列大小为5
enqueue(&cq, 1);
enqueue(&cq, 2);
enqueue(&cq, 3);
printCircularQueue(&cq);
return 0;
}
```
阅读全文