数据结构图解--队列 的实现/算法+源码

news2024/11/17 23:57:48

图解--队列

  • 最终的效果
  • 接下来 我们要做的就是 使用编程实现这种意识形态下的结构
  • 创建队列结构体
  • 初始化init
  • 进队入队 尾部插入
  • 队列的判断满操作
  • 出队
  • 队列是否为空
  • 遍历队列
  • 代码的操作交互
  • 意识

最终的效果

在这里插入图片描述
1.队列的结构形式

队列是一种线性结构 但是特殊的线性结构
只要的特殊在于

  1. 队列存在一个头 一个尾
  2. 队列的操作存在与两端
  3. 存在先进后出的限制条件

在这里插入图片描述
在这里插入图片描述

接下来 我们要做的就是 使用编程实现这种意识形态下的结构

创建队列结构体

//创建结构体 queue

struct Queue {
	int* pBase;
	int front;
	int real;
};

pBase 指向连个连续的内存的首地址
front 队列的头
real 队列的尾部 但是指向最后一个元素的下一个位置 (便于操作)

初始化init

void init(Queue* pQ) {
	//初始化 queue的

	//1. 申请内存
	pQ->pBase = (int*)malloc(sizeof(int) * 7);

	if (pQ->pBase == NULL) {
		printf("地址分配失败");
	}

	//2.初始化  front real
	pQ->front = 0;
	pQ->real = 0;

	//结束
	return;
}

在这里插入图片描述

进队入队 尾部插入

bool in_queue(Queue* pQ, int value) {
	//进队之前看看队列是否已满

	if (isfull(pQ) == true) {
		printf("队列已满 不可操作");
		return false;

	}
	else {

		//real 的位置放入 value

		pQ->pBase[pQ->real] = value;

		//real ++ 
		pQ->real = (pQ->real + 1) % 7;
		return true;
	}
}

在这里插入图片描述

pQ->real = (pQ->real + 1) % 7; 不是直接的++ 或是+1
因为那样的话 real 不超出下标存在队列 溢出
所谓pQ->real = (pQ->real + 1) % 7 pQ->real 就只能在 0-6之间的位置循环
这也就是所谓的循环队列
常见的形式是这样的
在这里插入图片描述

队列的判断满操作

在这里插入图片描述
但是上面不常用
而是用第二种方法
在这里插入图片描述

bool isfull(Queue* pQ) {

	//判断是否未满

	if ((pQ->real + 1) % 7 == pQ->front) {
		return true;

	}
	else {
		return false;
	}

}

出队

//出队列 
bool out_queue(Queue* pQ, int* value) {
	//判断队列是否为空

	if (empty(pQ)) {
		printf("当前为空 不可出队列");
		return false;
	}
	else {
		//front 上移动
		*value = pQ->pBase[pQ->front];  //把删除的值 返回出去 
		pQ->front = (pQ->front + 1) % 7;
		return true;
	}

}

在这里插入图片描述

队列是否为空

//判断是否为空 
bool empty(Queue* pQ) {
	//判断 real 和 front 是否相同

	if (pQ->real == pQ->front) {
		return true;
	}
	else {
		return false;
	}
}

在这里插入图片描述

遍历队列

//遍历队列
void travel(Queue* pQ) {
	//获取队列的头 front

	int t = pQ->front;
	while (t != pQ->real) {
		printf("%d ,", pQ->pBase[t]);
		t = (t + 1) % 7;
	}
	printf("\n");
}

在这里插入图片描述

代码的操作交互

int main() {
	Queue Qu;

	//1.初始化 操作
	init(&Qu);
	//2.进队
	in_queue(&Qu, 1);
	in_queue(&Qu, 2);
	in_queue(&Qu, 3);
	in_queue(&Qu, 4);
	in_queue(&Qu, 5);
	//3.遍历 
	travel(&Qu);
	//4.出队列
	int key;
	if (out_queue(&Qu, &key)) {
		printf("出队列完成 %d \n", key);
	}
	else {
		printf("出队列失败");
	}
	travel(&Qu);
	//5.进队列
	in_queue(&Qu, 77);
	//6.出队列
	int key1;
	if (out_queue(&Qu, &key1)) {
		printf("出队列完成 %d \n", key1);
	}
	else {
		printf("出队列失败");
	}
	travel(&Qu);

	//交互处理
	while (true) {
		printf("请输入1.进队 2出队的数值 1或2\n");
		int s;
		scanf("%d", &s);
		if (s == 1) {
			printf("in\n");
			int x;
			scanf("%d", &x);
			getchar();
			in_queue(&Qu, x);
			//插入ok
			printf("插入完成\n");
			travel(&Qu);
		}
		if (s == 2) {
			int key11;
			if (out_queue(&Qu, &key11)) {
				printf("出队列完成 %d \n", key11);
			}
			else {
				printf("出队列失败");
			}
			travel(&Qu);
		}


	}

	return 0;

}

在这里插入图片描述

意识

当我写出来的时候我自己都觉得不可思议
以前老师讲完全不懂 自己在blibli看郝斌
感觉好像来了 就废了几个小时 搞这个
其实上面的东西还是有的没讲清楚 就像是循环队列
为什么要用循环对了 …但是我尽力了
我觉得战胜了自己一次
但是我也意识到了
大学的老师是真的不会讲课
他们好像离开了PPT 就再也不知道怎么讲了
而且大学的老师 好像从来都不怎么写代码
而是在讲代码 直接不知道从哪来的代码截图
直接搞到PPT上面 然后不知道怎么就过去了
然后同学们自己看看 不会的问 …
然后有个同学说指针不太懂
老师好像下不了台了
就说 你们大学没学过c语言么 课下再好好看看把 数据结构的重点不是代码
考试不考试这个 大家看不懂也没关系

有的时候不是那些东西有多难
而是给你讲那些东西的人他自己也不会 但是他们不敢说罢了
不会的人给你讲他自己也不太会的东西 只能跳过
所以你觉得难 就不搞了
所以我觉得我们应该找一些懂得人才行

以上这些只用于我的大学数据结构的课
因为我明显能感受到 老师和那些所谓培训结构老师讲课的差距
请不要引申到别的地方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【炫酷登录界面】详解5款高级的前端登录页面及实现源码(附完整源码)

【写在前面】 其实好早之前我就想写这篇文章了,也有些网友还会私信我,说有时候公司要求登录页面的改造,问我能不能出一期关于登录页的文章,于是乎我也是拖到这个时候才整理出来,其实每篇文章的效果内容我都是自己亲自去…

基于51单片机设计的花样流水灯设计

一、项目介绍 花样流水灯是一种常见的LED灯效果,被广泛应用于舞台表演、节日庆典、晚会演出等场合。在现代智能家居、电子产品中,花样流水灯也被广泛使用,通过调整亮灭顺序和时间,可以实现各种炫酷的灯光效果,增强用户体验。而51单片机作为一种常见的嵌入式开发平台,具有…

深搜-剪枝优化

目录 1.问题引入 2.知识讲解 【搜索术语】 (1) *可行性剪枝*: (2) *预处理剪枝*: (3) *重复性剪枝*: (4) *最优性剪枝*: &…

动态规划IV (118、119、198、213、337)

CP118 杨辉三角 题目描述: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 学习记录: 思想就是没有思想,的杨辉三角,但是注意resiz…

AUTOSAR MCAL之SPI(Specification of SPI Handler/Driver)

本文将详细介绍AUTOSAR MCAL SPI模块的知识点及注意事项,本模块的配置会在其他文章进行分享。本文大部分内容来源于标准,并参照了NXP S32K1系列的 MCAL SPI的代码。 耐心看完本文后,你就对AUTOSAR MCAL SPI有了非常深入的了解。 目录 1. 模…

在githhub上创建个人主页的方法【2023更新版】

01-进入github的网站,链接 https://github.com/ ,然后注册,登陆,注意登陆时设置的用户名(username)就是将来你个人主页的三级域名,所以这里一定要慎重填写username。如下图所示: 02-注册完成后进入个人主…

【备战秋招】每日一题:5月13日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第四题-沙堡 在线评测链接:P1289 题目描述 塔子哥在海边建了一个沙堡乐园。 里面有一个巨大的沙堡,塔子哥每年都会增加这个沙堡的层数,但也有一定…

Found a swap file by the name “.credentials.swp“

问题 使用vim终端编辑一个文件的时候,遇到了一个提示:Found a swap file by the name ".credentials.swp" 解决 这是由于编辑文件意外退出导致的,产生了.swp文件,这个时候,只要按下键盘【A】键 然后,使用…

Easy_Trans轻松让你的项目减少30%SQL代码量

什么是Easy_Trans Easy Trans是一款用于做数据翻译的代码辅助插件,利用MyBatis Plus/JPA/BeetlSQL 等ORM框架的能力自动查表,让开发者可以快速的把ID/字典码 翻译为前端需要展示的数据。 easy trans的优点 功能多样 缓存支持 跨微服务翻译支持(User和…

蓝奥声核心技术分享 ——无线单火控制技术

1.技术背景 无线单火控制技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策,属于蓝奥声核心技术--边缘协同感知(EICS)技术的关键支撑性技术之一。该项技术属于物联网边缘域的无线通信与智能控制技术领域。 对于不同智能应用场景&am…

安庆师范大学之计科-数据结构MOOC期末考试

单选 5分/题,共30题 1、在长度为n的顺序表的第i个位置上插入一个元素,i的合理取值范围是( )。 A.1≤i≤n B.任意正整数 C.i≥0 D.1≤i≤n1 正确答案:D 2‏、已知L是带表头结点单链表的头指针,摘除…

kubernetes operator解析

您是否想过站点可靠性工程 (SRE) 团队如何有效地成功管理复杂的应用程序? 在 Kubernetes 生态中,只有一个答案:Kubernetes Operators! 在本文中,我们将研究它们是什么以及它们是如何工作的。 Kubernetes Operator 概念…

STM32 软件模拟SPI

STM32 软件模拟SPI 前言关于 SPISPI 协议软件模拟实现Driver_SPI.hDriver_SPI.c 前言 STM32库:标准函数库 测试环境:STM32F103系列 关于 SPI SPI 协议 SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉…

Python ChatGPT API 新增的函数调用功能演示

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 重磅更新,API 添加函数调用能力,能处理更长上下文,价格又有所降低 … 知乎讨论:https://www.zh…

【超详细教学】Python制作迷宫小游戏教程

文章目录 前言1.首先确定迷宫的大小2. 定义迷宫的墙壁和通道3.定义迷宫的起点和终点4.定义迷宫的方向5. 生成一个空的迷宫6. 在迷宫中随机选择一个起点和终点7. 在迷宫中随机选择一个方向8. 检查一个位置是否在迷宫内9. 检查一个位置是否是墙壁10. 检查一个位置是否是通道11. 检…

工程师卓越之旅:技术文档怎么写

0.意义和价值 当前信息共享长期技术知识传承加深作者的理解和思考交付包括代码和技术文档 1.准备阶段 明确文档需求、受众和内容范围 2.调研阶段 对比有代表性的同类或相似的技术文档,建立大致框架收集相关信息,分析验证进行技术决策在文档中将每个…

HttpServletRequest对象中获取客户端IP地址

什么是HttpServletRequest对象 HttpServletRequest对象是Java Servlet规范中定义的一种接口,它封装了客户端请求的所有信息,例如请求头、请求参数、请求方法、请求URL等。在Java Web开发中,HttpServletRequest对象非常常用,可以用…

关于Java SSM框架的面试题

一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:1、IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,se…

程序替换原理

文章目录 一、程序替换 一、程序替换 程序替换用于将当前进程的用户空间的代码和数据全部替换为新程序的代码和数据,程序替换不会创建新进程,而是用当前进程执行新程序的代码,fork 创建子进程后,子进程默认执行的是父进程的代码&…

信创-大数据平台CPU架构支持

一、CDH和HDP、CDP CDP数据中心类似于CDH和HDP,直接安装在硬件服务器上,目前支持市面上主流的X86服务器,包括国内海光服务器, CDH不支持ARM 以上两种大数据平台都仅支持x86架构,早在几年期RedHat联手cloudera公司发表声明将推出64位ARM版,据…