用C++编写一个程序实现顺序队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化队列 (2)建立顺序队列 (3)入队 (4)出队 (5)判断队列是否为空 (6)取队列头元素 (7)遍历队列
时间: 2024-02-05 14:03:39 浏览: 80
数据结构与算法C++实现 循环顺序队列的初始化,求长度,入队,出队
5星 · 资源好评率100%
```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 IsEmpty(SqQueue Q) {
return (Q.front == Q.rear);
}
// 判断队列是否已满
int IsFull(SqQueue Q) {
return ((Q.rear + 1) % MAXSIZE == Q.front);
}
// 入队
int EnQueue(SqQueue *Q, int x) {
if (IsFull(*Q)) {
return 0;
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1;
}
// 出队
int DeQueue(SqQueue *Q, int *x) {
if (IsEmpty(*Q)) {
return 0;
}
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1;
}
// 取队列头元素
int GetFront(SqQueue Q, int *x) {
if (IsEmpty(Q)) {
return 0;
}
*x = Q.data[Q.front];
return 1;
}
// 遍历队列
void TraverseQueue(SqQueue Q) {
int i;
printf("队列元素为:");
for (i = Q.front; i != Q.rear; i = (i + 1) % MAXSIZE) {
printf("%d ", Q.data[i]);
}
printf("\n");
}
int main() {
SqQueue Q;
int i, x;
// 初始化队列
InitQueue(&Q);
// 建立顺序队列
for (i = 1; i <= 5; i++) {
EnQueue(&Q, i);
}
// 入队
printf("请输入要入队的元素(输入0结束):");
while (scanf("%d", &x) == 1 && x != 0) {
if (EnQueue(&Q, x)) {
printf("入队成功!\n");
} else {
printf("队列已满,入队失败!\n");
}
printf("请输入要入队的元素(输入0结束):");
}
// 出队
printf("出队的元素为:");
while (DeQueue(&Q, &x)) {
printf("%d ", x);
}
printf("\n");
// 判断队列是否为空
if (IsEmpty(Q)) {
printf("队列为空!\n");
} else {
printf("队列不为空!\n");
}
// 取队列头元素
if (GetFront(Q, &x)) {
printf("队列头元素为:%d\n", x);
} else {
printf("队列为空,无法取队列头元素!\n");
}
// 遍历队列
TraverseQueue(Q);
return 0;
}
```
阅读全文