//定义顺序循环队列-数组
#include <stdio.h>
#define MaxSize 15
typedef struct {
int data[MaxSize];
int front, rear;
}SqQueue;//顺序队列
typedef struct LinkNode{
int data;
struct LinkNode* next;
/*定义一个指向 struct LinkNode 类型的指针 next 。
在结构体内部,通过这种方式可以方便地指向下一个相同类型的节点,
从而构建链表结构。*/
}LinkNode;//队列链结点
typedef struct {
LinkNode* front,*rear;
//前面已经使用 typedef 为 struct LinkNode 定义了一个新的类型名 LinkNode 。
// 所以在后续的代码中,可以直接使用 LinkNode* 来表示指向该结构体类型的指针。
}LinkQuene;//链队列
下面是源文件
#include "定义循环队列和链队列.cpp"
void InitQueue(SqQueue& q) {
q.front = q.rear = 0;
}//初始化
bool isEmpty(SqQueue q) {//判空
return q.front == q.rear;
}
bool isFull(SqQueue q) {//判满
return (q.rear + 1) % MaxSize == q.front;
}
bool EnQueue(SqQueue &q,int x) {//入队列
if (isFull(q)) {
printf("队满");
return false;
}
else {
q.data[q.rear] = x;
q.rear = (q.rear + 1) % MaxSize;
return true;
}
}
bool DeQueue(SqQueue& q, int &x) {//出队
if (isEmpty(q)) {
printf("队空");
return false;
}
else {
x = q.data[q.front];
q.front = (q.front + 1) % MaxSize;
return true;
}
}
bool GetQueue(SqQueue q,int &x) {//读队头
if (isEmpty(q)) {
printf("队空");
return false;
}
else {
x = q.data[q.front];
return false;
}
}
bool AllGet(SqQueue q, int& x) {//遍历
if (isEmpty(q)) {
printf("队空");
return false;
}
else {
int index = q.front;
while (index != q.rear) {
x = q.data[index];
printf("元素: %d\n", x);
index = (index + 1) % MaxSize;
}
return true;
}
}
int main() {
SqQueue q;
int choice, x;
InitQueue(q); // 初始化队列
printf("请选择操作:\n");
printf("1. 入队列\n");
printf("2. 出队列\n");
printf("3. 遍历队列\n");
printf("4. 读队头\n");
printf("0. 退出\n");
scanf_s("%d", &choice);
while (choice != 0) {
switch (choice) {
case 1:
printf("请输入要入队列的元素值: ");
scanf_s("%d", &x);
if (EnQueue(q, x)) {
printf("入队列成功! \n");
}
else {
printf("入队列失败!\n");
}
break;
case 2:
if (DeQueue(q, x)) {
printf("出队列元素为: %d\n", x);
}
else {
printf("出队列失败,队列为空!\n");
}
break;
case 3:
AllGet(q, x);
break;
case 4:
if (GetQueue(q, x)) {
printf("队头元素为: %d\n", x);
}
else {
printf("读队头元素失败!\n");
}
break;
case 0:
break;
return 0;
default:
printf("无效的选择,请重新输入!\n");
}
printf("\n请选择操作:\n");
scanf_s("%d", &choice);
}
return 0;
}