Files
CSPostgraduate-408/DataStructure/Src/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp
2020-09-26 22:33:18 +08:00

117 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// Created by kim yang on 2020/7/31.
// Copyright (c) Kim Yang All rights reserved.
//
//循环顺序队列的第一种实现方式
#include <stdio.h>
/**定义模块**/
#define MaxSize 10
typedef struct {
int data[MaxSize];//
int front, rear;//对头指针和队尾指针
} SqQueue;
//函数声明
void InitQueue(SqQueue &Q);//初始化
bool QueueEmpty(SqQueue Q);//判空
bool EnQueue(SqQueue &Q, int t);//入队操作
bool DeQueue(SqQueue &Q, int &x);//出队操作
bool GetHead(SqQueue Q, int &x);//获取队头元素,用x返回
/**定义模块**/
/**实现模块**/
void InitQueue(SqQueue &Q) {
Q.rear = Q.front = 0;//初始化时队头队尾都指向0
}
bool QueueEmpty(SqQueue Q) {
if (Q.front == Q.rear)
return true;
else
return true;
}
bool EnQueue(SqQueue &Q, int t) {
if ((Q.rear + 1) % MaxSize == Q.front)return false;//队满,注意这里的判满条件
//这里的判满条件会造成浪费一个存储空间的问题
Q.data[Q.rear] = t;
Q.rear = (Q.rear + 1) % MaxSize;//通过取余操作让整个队列循环起来
return true;
}
bool DeQueue(SqQueue &Q, int &x) {
if (Q.rear == Q.front)return false;//队空
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;
}
bool GetHead(SqQueue Q, int &x) {
if (Q.front == Q.rear)return false;
x = Q.data[Q.front];
return true;
}
/**实现模块**/
/**测试模块**/
//打印整个队列
void PrintQueue(SqQueue Q) {
printf("开始打印队列\n");
while (Q.front != Q.rear) {
printf("Q[%d]=%d\n", Q.front, Q.data[Q.front]);
Q.front = (Q.front + 1) % MaxSize;
}
printf("打印完毕!\n");
}
//测试
void TestQueue() {
printf("开始测试!\n");
SqQueue Q;
InitQueue(Q);
if (EnQueue(Q, 1)) {
printf("入队成功啦!\n");
} else {
printf("入队失败了\n");
}
if (EnQueue(Q, 2)) {
printf("入队又成功啦!\n");
} else {
printf("入队又失败了\n");
}
PrintQueue(Q);
int x;
if (DeQueue(Q, x)) {
printf("出队成功,弹出的元素为:%d\n", x);
} else {
printf("出队失败了,再检出一下吧!\n");
}
if (GetHead(Q, x)) {
printf("获取队头成功!,队头元素为:%d\n", x);
} else {
printf("获取队头元素失败!");
}
if (QueueEmpty(Q)) {
printf("队空啦\n");
} else {
printf("队非空\n");
}
printf("结束测试!\n");
}
/**测试模块**/
int main() {
TestQueue();
return 0;
}