This repository has been archived on 2023-11-30. You can view files and clone it, but cannot push or open issues or pull requests.
DataStructure_ArrayQueue_C/main.cpp
2023-05-21 16:38:55 +08:00

111 lines
2.6 KiB
C++

#include <cstdio>
#define MaxSize 100
typedef int datatype;
typedef struct {
int rear;
int front;
datatype data[MaxSize];
} SqQueue;
// 初始化队列
void InitQueue(SqQueue &queue) {
queue.rear = 0;
queue.front = 0;
}
// 判断队列是否为空
int isEmpty(SqQueue queue) {
if (queue.rear == queue.front) return 1;
return 0;
}
// 判断队列是否为满
int isFull(SqQueue queue) {
if (queue.front-1 == queue.rear) return 1;
return 0;
}
// 入队
int enQueue(SqQueue &queue, datatype data) {
if (queue.front-1 == queue.rear) return 0;
queue.data[queue.rear] = data;
if ( (queue.rear+1)%MaxSize == 0 && (queue.rear+1)%MaxSize < queue.front)
queue.rear = (queue.rear+1)%MaxSize;
else queue.rear++;
return 1;
}
// 出队
int deQueue(SqQueue &queue) {
if (queue.rear == queue.front) return 0;
queue.data[queue.front] = NULL;
if ((queue.front+1)%MaxSize == 0 && (queue.front+1)%MaxSize < queue.rear)
queue.front = (queue.front+1)%MaxSize;
else queue.front++;
return 1;
}
// 查询队列
void selQueue(SqQueue queue) {
printf("[SELECT] 队列列表:[ ");
for (int i = queue.front; i < queue.rear-1; ++i) {
printf("%d, ",queue.data[i]);
}
printf("%d ]\n",queue.data[queue.rear-1]);
printf("\n");
}
int main() {
int ch;
datatype e;
SqQueue queue;
InitQueue(queue);
Start:
printf("[INFO] 队列菜单:\n");
printf("\t=========\n");
printf("\t1. 入队\n");
printf("\t2. 出队\n");
printf("\t3. 队列查询\n");
printf("\t4. 是否队满\n");
printf("\t5. 是否队空\n");
printf("\t==========\n");
printf("\t选择内容:");
scanf_s("%d", &ch);
printf("\n");
switch (ch) {
case 1:
printf("[INSERT] 插入数据:");
scanf_s("%d", &e);
if (enQueue(queue,e)) printf("\t[INFO] 队列插入成功\n");
else printf("\t[INFO] 队列插入失败(队满)");
printf("\n");
goto Start;
case 2:
if (deQueue(queue)) printf("[INFO] 出队成功\n");
else printf("[INFO] 出队失败(队空)\n");
printf("\n");
goto Start;
case 3:
selQueue(queue);
goto Start;
case 4:
if (isFull(queue))
printf("[SELECT] 队满\n");
else
printf("[SELECT] 未满\n");
printf("\n");
goto Start;
case 5:
if (isEmpty(queue))
printf("[SELECT] 队空\n");
else
printf("[SELECT] 未空\n");
printf("\n");
goto Start;
default: break;
}
}