用c++编写一个程序实现顺序队列的基本运算
时间: 2024-02-18 08:35:40 浏览: 85
以下是一个简单的顺序队列的基本运算程序,包括入队、出队、判断队列是否为空、判断队列是否已满和遍历队列等。
```c
#include <stdio.h>
#define MAXSIZE 10 // 定义队列最大长度
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(SqQueue Q) {
if (Q.front == Q.rear) {
return 1;
}
return 0;
}
// 判断队列是否已满
int IsFull(SqQueue Q) {
if ((Q.rear + 1) % MAXSIZE == Q.front) {
return 1;
}
return 0;
}
// 入队
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; // 删除成功
}
// 遍历队列
void TraverseQueue(SqQueue Q) {
int i = Q.front;
while (i != Q.rear) {
printf("%d ", Q.data[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
}
int main() {
SqQueue Q;
int x;
InitQueue(&Q);
// 入队
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
TraverseQueue(Q); // 打印队列元素
// 出队
DeQueue(&Q, &x);
printf("出队元素为:%d\n", x);
TraverseQueue(Q);
// 入队
EnQueue(&Q, 4);
TraverseQueue(Q);
return 0;
}
```
程序中,通过定义一个结构体 SqQueue 来表示队列,其中包括一个数组 data,表示队列元素,以及队头指针 front 和队尾指针 rear,表示队列的头和尾。
程序中实现了初始化队列、判断队列是否为空、判断队列是否已满、入队、出队和遍历队列等基本运算。其中,入队操作通过判断队列是否已满来决定是否插入元素,并更新队尾指针;出队操作通过判断队列是否为空来决定是否删除元素,并更新队头指针。遍历队列操作则是从队头指针开始,依次输出队列元素。
阅读全文