1.操作菜单
2.初始化
void init(SqQueue& queue) {
queue.front = 0;
queue.rear = 0;
}
3.判空
bool empty(SqQueue queue) {
return queue.front == queue.rear;
}
4.判满
bool full(SqQueue queue) {
return queue.front == (queue.rear + 1) % MAXSIZE;
}
5.入队
bool add(SqQueue& queue,ElemType data) {
if (full(queue)) {
return false;
}
else {
queue.data[queue.rear] = data;
queue.rear = (queue.rear + 1) % MAXSIZE;
return true;
}
}
6.出队
bool dele(SqQueue& queue,ElemType &data) {
if (empty(queue)) {
return false;
}
else {
data = queue.data[queue.front];
queue.front = (queue.front + 1) % MAXSIZE;
return true;
}
}
7.读取队头
bool get(SqQueue queue, ElemType& data) {
if (empty(queue)) {
return false;
}
else {
data = queue.data[queue.front];
return true;
}
}
8.队列长度
int lenth(SqQueue queue) {
return (queue.rear - queue.front + MAXSIZE ) % MAXSIZE;
}
9.完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define MAXSIZE 5
typedef int ElemType;
typedef struct {
ElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;
void menu(SqQueue& queue);
void choice(SqQueue& queue);
void init(SqQueue& queue);
bool empty(SqQueue queue);
bool add(SqQueue& queue, ElemType data);
bool full(SqQueue queue);
bool dele(SqQueue& queue, ElemType& data);
bool get(SqQueue queue, ElemType& data);
int lenth(SqQueue queue);
void init(SqQueue& queue) {
queue.front = 0;
queue.rear = 0;
}
bool empty(SqQueue queue) {
return queue.front == queue.rear;
}
bool full(SqQueue queue) {
return queue.front == (queue.rear + 1) % MAXSIZE;
}
bool add(SqQueue& queue,ElemType data) {
if (full(queue)) {
return false;
}
else {
queue.data[queue.rear] = data;
queue.rear = (queue.rear + 1) % MAXSIZE;
return true;
}
}
bool dele(SqQueue& queue,ElemType &data) {
if (empty(queue)) {
return false;
}
else {
data = queue.data[queue.front];
queue.front = (queue.front + 1) % MAXSIZE;
return true;
}
}
bool get(SqQueue queue, ElemType& data) {
if (empty(queue)) {
return false;
}
else {
data = queue.data[queue.front];
return true;
}
}
int lenth(SqQueue queue) {
return (queue.rear - queue.front + MAXSIZE ) % MAXSIZE;
}
void menu(SqQueue& queue) {
printf("----------------循环队列---------------\n");
printf(" 1.初始化 \n");
printf(" 2.判断队列空 \n");
printf(" 3.入队 \n");
printf(" 4.出队 \n");
printf(" 5.读取队头元素 \n");
printf(" 6.队列长度 \n");
choice(queue);
}
void choice(SqQueue& queue) {
int choice;
int len = 0;
bool queueEmpty;
bool isAdd;
bool isDel;
bool isGet;
ElemType addData;
ElemType delData;
ElemType getData;
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
init(queue);
printf("初始化完成\n");
break;
case 2: {
queueEmpty = empty(queue);
if (queueEmpty) {
printf("队列空\n");
}
else {
printf("队列不空\n");
}
break;
}
case 3: {
printf("请输入你要添加的元素:");
scanf("%d", &addData);
isAdd = add(queue, addData);
if (isAdd) {
printf("添加成功\n");
}
else {
printf("添加失败\n");
}
break;
}
case 4: {
isDel = dele(queue, delData);
if (isDel) {
printf("出队成功,出队的元素为%d\n", delData);
}
else {
printf("操作失败\n");
}
break;
}
case 5: {
isGet = get(queue, getData);
if (isGet) {
printf("读取成功,元素为%d\n", getData);
}
else {
printf("读取失败\n");
}
break;
}
case 6:
len = lenth(queue);
printf("长度为%d\n", len);
break;
}
menu(queue);
}
int main() {
SqQueue queue;
menu(queue);
return 0;
}
10.注意
- 因为这是循环队列,充分利用整个队列,所以我们要注意出列和进队时的rear和front的变化
- 长度的确定,可以画一个队列,然后用代码测试。