用c语言编程实现如下功能: (1)根据输入的队列长度n和各元素值建立一个循环顺序表表示的队列(循环队列),并输出队列中各元素值。 (2)将数据元素e入队,并输出入队后的队列中各元素值。 (3)将循环队列的队首元素出队,并输出出队元素的值和出队后队列中各元素值。
时间: 2024-02-09 14:11:51 浏览: 91
好的,以下是使用 C 语言实现循环队列的代码,包含了你提到的三个功能:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 循环队列最大长度
typedef struct {
int data[MAXSIZE]; // 存储队列元素
int front; // 队首指针
int rear; // 队尾指针
} SqQueue;
// 初始化循环队列
void InitQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
// 判断循环队列是否为空
int QueueEmpty(SqQueue Q) {
return Q.front == Q.rear;
}
// 判断循环队列是否已满
int QueueFull(SqQueue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front;
}
// 入队
void EnQueue(SqQueue *Q, int e) {
if (QueueFull(*Q)) {
printf("队列已满,无法入队!\n");
return;
}
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
}
// 出队
int DeQueue(SqQueue *Q, int *e) {
if (QueueEmpty(*Q)) {
printf("队列已空,无法出队!\n");
return 0;
}
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1;
}
// 输出循环队列中的元素
void PrintQueue(SqQueue Q) {
if (QueueEmpty(Q)) {
printf("队列为空!\n");
return;
}
printf("队列中的元素为:");
int i = Q.front;
while (i != Q.rear) {
printf("%d ", Q.data[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
}
int main() {
SqQueue Q;
int n, e;
printf("请输入队列长度n:");
scanf("%d", &n);
printf("请输入各元素值:");
for (int i = 0; i < n; i++) {
scanf("%d", &e);
EnQueue(&Q, e);
}
PrintQueue(Q);
printf("请输入要入队的元素e:");
scanf("%d", &e);
EnQueue(&Q, e);
PrintQueue(Q);
int de_e;
DeQueue(&Q, &de_e);
printf("出队元素为:%d\n", de_e);
PrintQueue(Q);
return 0;
}
```
注意:为了实现循环队列,队尾指针 rear 在增加时需要取模,即 `(Q->rear + 1) % MAXSIZE`,队首指针 front 也同理。
阅读全文