按用户要求随机输入元素实现队列操作,基于顺序操作实现: (1)编写入队函数 (2)编写出队函数 (3)编写判断队满和队空的函数;c语言实现,完整代码,并给出算法流程
时间: 2024-05-10 21:20:15 浏览: 47
算法流程:
1. 定义队列结构体,包括队列最大长度、队头、队尾、队列数组。
2. 编写入队函数,先判断队列是否已满,如满则输出提示信息并返回;否则将元素插入队尾,并更新队尾指针。
3. 编写出队函数,先判断队列是否为空,如为空则输出提示信息并返回;否则将队头元素弹出,并更新队头指针。
4. 编写判断队满函数,通过比较队头和队尾指针是否相邻来判断。
5. 编写判断队空函数,通过比较队头和队尾指针是否相等来判断。
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LEN 10
typedef struct {
int front;
int rear;
int data[MAX_LEN];
} Queue;
void init(Queue* q) {
q->front = q->rear = 0;
}
void enqueue(Queue* q, int x) {
if ((q->rear + 1) % MAX_LEN == q->front) {
printf("Queue is full!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_LEN;
}
int dequeue(Queue* q) {
if (q->front == q->rear) {
printf("Queue is empty!\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAX_LEN;
return x;
}
int is_full(Queue* q) {
return (q->rear + 1) % MAX_LEN == q->front;
}
int is_empty(Queue* q) {
return q->front == q->rear;
}
int main() {
Queue q;
init(&q);
srand(time(NULL));
for (int i = 0; i < MAX_LEN + 1; i++) {
int x = rand() % 100;
printf("Enqueue %d\n", x);
enqueue(&q, x);
}
printf("Dequeue:\n");
for (int i = 0; i < MAX_LEN + 1; i++) {
int x = dequeue(&q);
printf("%d ", x);
}
printf("\n");
return 0;
}
```
阅读全文