C++ 建立一个空队列,编写入队函数,随机产生10个100以内的整数,并按输入循环依次入队,编写出队函数,从键盘输入出队元素个数n(n<10),将n个元素出队后显示队中数据结果,考虑判断队空情况,编写取队头元素函数,若队不为空,则取队头元素显示;否则提示队空。
时间: 2023-06-09 11:02:52 浏览: 125
你好!听懂您的问题了。下面是解答:
首先,我们需要定义一个队列结构体,包括队头和队尾以及队列元素数组,具体代码如下:
```
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int data[10]; // 队列元素数组
} Queue;
```
然后,我们定义以下三个函数:
1. 初始化队列函数init\_queue,将队头和队尾指针都置为-1。
2. 入队函数enqueue,将元素插入队尾,并更新rear指针。
3. 出队函数dequeue,从队头开始按次序将元素出队,并更新front指针。
另外,我们还需要编写一个函数isEmpty,用于判断队列是否为空。如果队头指针和队尾指针都为-1,则说明队列为空。
下面是完整代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int data[10]; // 队列元素数组
} Queue;
void init_queue(Queue *q) {
q->front = q->rear = -1;
}
void enqueue(Queue *q, int value) {
q->rear++;
q->data[q->rear] = value;
}
int isEmpty(Queue *q) {
if (q->front == -1 && q->rear == -1)
return 1;
return 0;
}
int dequeue(Queue *q, int n) {
int i, val;
if (isEmpty(q)) {
printf("队列为空!\n");
return -1;
}
if (n > q->rear - q->front + 1) {
printf("出队元素个数超过队列元素个数!\n");
return -1;
}
printf("出队的元素为:");
for (i = 1; i <= n; i++) {
q->front++;
val = q->data[q->front];
printf("%d ", val);
}
printf("\n");
return 0;
}
int getFront(Queue *q) {
if (isEmpty(q)) {
printf("队列为空!\n");
return -1;
}
printf("队头元素为:%d\n", q->data[q->front]);
return 0;
}
int main() {
Queue q;
int i, n, val;
srand(time(NULL)); // 初始化随机数种子
// 初始化队列
init_queue(&q);
// 将10个100以内的整数随机入队
for (i = 1; i <= 10; i++) {
val = rand() % 100;
enqueue(&q, val);
}
// 显示队列中的数据
printf("队列中的数据为:");
for (i = q.front + 1; i <= q.rear; i++) {
printf("%d ", q.data[i]);
}
printf("\n");
// 出队
printf("请输入要出队的元素个数(n<10):");
scanf("%d", &n);
dequeue(&q, n);
// 取队头元素
getFront(&q);
return 0;
}
```
希望这个代码可以帮到您,如果还有什么问题,可以随时问我。
阅读全文