C语言 任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素等操作。 1、插入元素;2、显示队列中的元素;3、显示队列长度;4、显示队头元素;5、删除队头元素后,显示队列中元素,同时显示被删除的元素;6、清空队列元素。
时间: 2024-01-13 07:05:24 浏览: 71
xqueue:基于C语言实现的循环队列缓冲区
好的,我可以帮你解答这个问题。以下是C语言实现顺序循环队列的代码,其中包括清空、插入新元素、返回队头元素以及删除队头元素等操作:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front; // 队首指针
int rear; // 队尾指针
} Queue;
void init(Queue *q) {
q->front = q->rear = 0;
}
int is_empty(Queue *q) {
return q->front == q->rear;
}
int is_full(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
int enqueue(Queue *q, int x) {
if (is_full(q)) {
printf("Queue is full!\n");
return 0;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1;
}
int dequeue(Queue *q, int *x) {
if (is_empty(q)) {
printf("Queue is empty!\n");
return 0;
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1;
}
int get_front(Queue *q, int *x) {
if (is_empty(q)) {
printf("Queue is empty!\n");
return 0;
}
*x = q->data[q->front];
return 1;
}
int get_size(Queue *q) {
return (q->rear - q->front + MAX_SIZE) % MAX_SIZE;
}
void clear(Queue *q) {
q->front = q->rear = 0;
}
void display(Queue *q) {
int i;
if (is_empty(q)) {
printf("Queue is empty!\n");
return;
}
printf("Elements of the queue are: ");
i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
Queue q;
int x, choice;
init(&q);
while (1) {
printf("\nEnter your choice:\n");
printf("1. Enqueue an element\n");
printf("2. Display the elements\n");
printf("3. Display the size\n");
printf("4. Display the front element\n");
printf("5. Dequeue an element\n");
printf("6. Clear the queue\n");
printf("0. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 0:
exit(0);
case 1:
printf("Enter the element to be enqueued: ");
scanf("%d", &x);
if (enqueue(&q, x)) {
printf("Enqueued successfully!\n");
}
break;
case 2:
display(&q);
break;
case 3:
printf("Size of the queue is: %d\n", get_size(&q));
break;
case 4:
if (get_front(&q, &x)) {
printf("Front element is: %d\n", x);
}
break;
case 5:
if (dequeue(&q, &x)) {
printf("Dequeued element is: %d\n", x);
printf("Queue after dequeue: ");
display(&q);
}
break;
case 6:
clear(&q);
printf("Queue cleared successfully!\n");
break;
default:
printf("Invalid choice!\n");
}
}
return 0;
}
```
以上代码中,`Queue`是一个结构体,包含队列的数据`data`、队首指针`front`和队尾指针`rear`。`init`函数用于初始化队列,`is_empty`和`is_full`函数判断队列是否为空或已满。`enqueue`函数用于插入新元素,`dequeue`函数用于删除队头元素并返回其值,`get_front`函数用于返回队头元素的值而不删除它,`get_size`函数用于返回队列的长度。`clear`函数用于清空队列,`display`函数用于打印队列中的元素。
在`main`函数中,我们使用一个无限循环来接收用户输入的选择。用户可以选择插入元素、显示队列中的元素、显示队列长度、显示队头元素、删除队头元素、清空队列元素或退出程序。程序根据用户的选择调用相应的函数。
阅读全文