408-王道-循环队列

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.注意

  1. 因为这是循环队列,充分利用整个队列,所以我们要注意出列和进队时的rear和front的变化
  2. 长度的确定,可以画一个队列,然后用代码测试。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值