建立一个c++空队列,并按要求完成循环队列的相关操作: (1)编写入队函数,随机产生10个100以内的整数,并按输入循环依次入队; (2)编写出队函数,从键盘输入出队元素个数n(n<10),将n个元素出队后显示队中数据结果,考虑判断队空情况; (3)编写取队头元素函数,若队不为空,则取队头元素显示;否则提示队空。
时间: 2023-06-09 18:02:59 浏览: 114
好的,我明白了您的要求。以下是实现循环队列相关操作的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 10 // 循环队列的最大长度
typedef struct {
int *base; // 存放队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void InitQueue(Queue *q) {
q->base = (int *) malloc(MAXSIZE * sizeof(int)); // 为队列元素动态分配内存空间
q->front = q->rear = 0; // 初始化队头和队尾指针
}
// 入队操作
void EnQueue(Queue *q) {
int i, n, x;
srand((unsigned) time(NULL)); // 用当前时间作为随机数种子
printf("随机产生的10个100以内的整数如下:\n");
for (i = 0; i < MAXSIZE; i++) {
x = rand() % 100; // 产生0~99之间的随机整数
printf("%d ", x);
if ((q->rear + 1) % MAXSIZE == q->front) {
printf("\n队列已满,无法入队!\n");
return;
}
q->base[q->rear] = x; // 将元素x入队
q->rear = (q->rear + 1) % MAXSIZE; // 队尾指针后移
}
printf("\n循环队列中的元素如下:\n");
for (i = q->front; i != q->rear; i = (i + 1) % MAXSIZE) { // 遍历队列中的元素
printf("%d ", q->base[i]);
}
printf("\n");
}
// 出队操作
void DeQueue(Queue *q) {
int i, n;
printf("请输入要出队的元素个数n(n<10):\n");
scanf("%d", &n);
if (n <= 0 || n > MAXSIZE) {
printf("无效的元素个数n!\n");
return;
}
if (n > q->rear - q->front) {
printf("出队元素个数不能超过队列中已有的元素个数!\n");
return;
}
printf("出队的%d个元素依次为:\n", n);
for (i = 0; i < n; i++) {
printf("%d ", q->base[q->front]); // 显示队头元素
q->front = (q->front + 1) % MAXSIZE; // 队头指针后移
}
printf("\n剩余的元素依次为:\n");
if (q->front == q->rear) {
printf("队列已空!\n");
return;
}
for (i = q->front; i != q->rear; i = (i + 1) % MAXSIZE) { // 遍历队列中的元素
printf("%d ", q->base[i]);
}
printf("\n");
}
// 取队头元素操作
void GetHead(Queue *q) {
if (q->front == q->rear) {
printf("队列已空!\n");
return;
}
printf("队头元素为:%d\n", q->base[q->front]);
}
int main() {
Queue q;
int choice;
InitQueue(&q); // 初始化队列
do {
printf("\n请选择要进行的操作:\n");
printf(" 1. 入队操作\n");
printf(" 2. 出队操作\n");
printf(" 3. 取队头元素操作\n");
printf(" 4. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
EnQueue(&q); // 调用入队函数
break;
case 2:
DeQueue(&q); // 调用出队函数
break;
case 3:
GetHead(&q); // 调用取队头元素函数
break;
case 4:
printf("程序已退出!\n");
break;
default:
printf("无效的选项!\n");
break;
}
} while (choice != 4);
return 0;
}
```
请按照要求进行测试并反馈结果,谢谢!
阅读全文