按用户要求随机输入元素实现队列操作,基于顺序操作实现: (1)编写入队函数 (2)编写出队函数 (3)编写判断队满和队空的函数;c语言实现,完整代码,给出算法流程
时间: 2024-05-21 16:11:31 浏览: 81
算法流程:
1. 定义队列结构体,包含队头、队尾和队列容量。
2. 定义入队函数enqueue,接受队列指针和元素值作为参数。
3. 判断队列是否已满,如果是则返回错误信息。
4. 将元素值放入队尾,并更新队尾指针。
5. 定义出队函数dequeue,接受队列指针作为参数。
6. 判断队列是否为空,如果是则返回错误信息。
7. 将队头元素值取出,并更新队头指针。
8. 定义判断队满函数isFull,接受队列指针作为参数。
9. 判断队尾指针是否等于队列容量减一。
10. 定义判断队空函数isEmpty,接受队列指针作为参数。
11. 判断队头指针是否等于队尾指针。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int front;
int rear;
int capacity;
int *array;
} Queue;
Queue *createQueue(int size) {
Queue *queue = (Queue *)malloc(sizeof(Queue));
queue->front = -1;
queue->rear = -1;
queue->capacity = size;
queue->array = (int *)malloc(size * sizeof(int));
return queue;
}
void enqueue(Queue *queue, int data) {
if (queue->rear == queue->capacity - 1) {
printf("Queue is full\n");
return;
}
queue->rear++;
queue->array[queue->rear] = data;
if (queue->front == -1) {
queue->front++;
}
}
void dequeue(Queue *queue) {
if (queue->front == -1) {
printf("Queue is empty\n");
return;
}
printf("Dequeued element: %d\n", queue->array[queue->front]);
if (queue->front == queue->rear) {
queue->front = -1;
queue->rear = -1;
} else {
queue->front++;
}
}
int isFull(Queue *queue) {
return queue->rear == queue->capacity - 1;
}
int isEmpty(Queue *queue) {
return queue->front == -1;
}
int main() {
Queue *queue = createQueue(MAX_SIZE);
int choice, data;
while (1) {
printf("1.Enqueue\n");
printf("2.Dequeue\n");
printf("3.Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter element to enqueue: ");
scanf("%d", &data);
enqueue(queue, data);
break;
case 2:
dequeue(queue);
break;
case 3:
exit(0);
default:
printf("Invalid choice\n");
}
}
return 0;
}
阅读全文