请编写c程序,实现顺序队列的各种基本运算,并在此基础上设计一个主程序,完成以下功能:初始化并建立队列、元素入队、元素出队、判断队列是否为空、取队头元素、遍历队列。
时间: 2023-06-05 21:47:54 浏览: 114
好的,以下是顺序队列的基本运算的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 = ;
}
// 判断队列是否为空
int QueueEmpty(SqQueue Q) {
if (Q.front == Q.rear) {
return 1; // 队列为空
} else {
return ; // 队列不为空
}
}
// 元素入队
int EnQueue(SqQueue *Q, int x) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
return ; // 队列已满,无法入队
} else {
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1; // 入队成功
}
}
// 元素出队
int DeQueue(SqQueue *Q, int *x) {
if (Q->front == Q->rear) {
return ; // 队列为空,无法出队
} else {
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1; // 出队成功
}
}
// 取队头元素
int GetHead(SqQueue Q, int *x) {
if (Q.front == Q.rear) {
return ; // 队列为空,无法取队头元素
} else {
*x = Q.data[Q.front];
return 1; // 取队头元素成功
}
}
// 遍历队列
void TraverseQueue(SqQueue Q) {
int i;
for (i = Q.front; i != Q.rear; i = (i + 1) % MAXSIZE) {
printf("%d ", Q.data[i]);
}
printf("\n");
}
// 主程序
int main() {
SqQueue Q;
int x, flag;
InitQueue(&Q); // 初始化队列
// 元素入队
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
EnQueue(&Q, 4);
EnQueue(&Q, 5);
// 遍历队列
TraverseQueue(Q);
// 元素出队
flag = DeQueue(&Q, &x);
if (flag) {
printf("出队元素为:%d\n", x);
} else {
printf("队列为空,无法出队!\n");
}
// 判断队列是否为空
if (QueueEmpty(Q)) {
printf("队列为空!\n");
} else {
printf("队列不为空!\n");
}
// 取队头元素
flag = GetHead(Q, &x);
if (flag) {
printf("队头元素为:%d\n", x);
} else {
printf("队列为空,无法取队头元素!\n");
}
// 遍历队列
TraverseQueue(Q);
return ;
}
以上程序实现了顺序队列的各种基本运算,并在主程序中完成了初始化并建立队列、元素入队、元素出队、判断队列是否为空、取队头元素、遍历队列的功能。
阅读全文