栈的定义栈(stack)是限定仅在表尾进行插入和删除操作的线性表。(指的是栈顶)栈顶:插入和删除的一端栈底:另外一段空栈:不含任何数据元素的栈栈又称:后进先出的线性表,简称LIFO结构
注意:栈元素具有线性表关系,即前驱后继关系。特殊之处就是这个线性表的插入和删除位置,只能在栈顶进行。栈底是固定的,最先进栈的只能在栈底。
栈的插入操作叫做进栈,也叫压栈、入栈。
栈的删除操作,叫做出栈,也叫弹栈。
栈的抽象数据类型push:插入(进栈) pop:删除(出栈)
123456789101112ADT 栈(stack)Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。operation InitStack(*S):初始化操作,建立一个空栈s。 DestroyStack(*S):若栈存在,则销毁它。 CleanrStack(*S):将栈清空。 StackEmpyt(S):若栈为空,返回true,否则返回false。 GetTop(S,*e):若栈存在且非空,用e返回s的栈元素 Push(*S,e):若栈s存在,插入新元素e到 ...
大致1234567打开视频文件:使用 cv2.VideoCapture 打开指定路径的视频文件。检查是否成功打开:通过 cap.isOpened() 方法检查是否成功打开了视频文件。读取视频帧:在循环中使用 cap.read() 方法逐帧读取视频。显示视频帧:使用 cv2.imshow() 方法显示每一帧。保存视频帧:定义 save_image 函数来保存当前帧,并以 frame_计数.jpg 的形式命名。释放资源并关闭窗口:定义 release_resources函数或者cap.release()cv2.destroyAllWindows()释放摄像头并关闭所有窗口键盘输入监听:使用 cv2.waitKey() 方法等待一小段时间(这里设置为 1 毫秒),并在用户按下 'q' 键时退出循环。
读取视频12video_path = 'path_to_your_video.mp4' # 将此处替换为你的MP4文件路径cap = cv2.VideoCapture(video_path)
判断是否打开123# 检查视频是否成功打开if not c ...
华为云IOT连接
未读1、配置APN
AT+QICSGP=1,1,”cmnbiot”,””,””
2、开启移动网络
AT+NETOPEN
3、设置客户端ID
AT+MCONFIG=”id”,”用户名”,”密码”AT+MCONFIG="667145986bc31504f06f60ee_wulianwang_0_0_20","667145986bc31504f06f60ee_wulianwang","63e106dff798f9ed7d313f33c5e1cffe4ad206abe2121b993d464a8f111a97ba"
4、连接mqtt服务器
AT+MIPSTART=”服务器IP地址”,1883,4
AT+MIPSTART="0ae1ed433d.st1.iotda-device.cn-north-4.myhuaweicloud.com",1883,4
5、连接服务器,设置心跳60秒
AT+MCONNECT=1,60
6、订阅数据
AT+MSUB="$oc/devices/ ...
1.线性表的定义线性表:零个或多个数据元素的有限序列。
它是一个序列。如果有多个元素,则第一个元素无前驱,最后一个元素无后继,其他的每一个元素只有一个前驱和后继。
将线性表记为 a1,a2,a3,则a1是a2的直接前驱元素,a3是a2的直接后继元素。有且仅仅只有一个直接前驱和一个直接后继。
所以线性表元素的个数n(n≥0)定义为线性表的长度,当n=0,为空表。
在非空表中的每个元素都有一个确定的位置,比如a1是第一个,a3是最后一个。a2是第二个,称2为数据元素a2在线性表中的位序。
2.线性表的抽象数据类型当传递一个参数给函数的时候,这个参数会不会在函数内被改动决定了使用什么参数形式。
如果需要被改动,则需要传递指向这个参数的指针。
如果不用被改动可以直接传递这个参数。
总结:需要改动则传递参数的指针,不需要则传递这个参数。
3.线性表的顺序存储结构顺序存储结构线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
说白了就是:在内存中,占个地方,通过占位的形式,将一定的内存空间给占,然后把相同数据类型的数据元素一次存放在这里。
使用一维数组来实现顺序存储结构 ...
从四月份到八月份的比赛结束,取得了华东赛区一等奖和全国总决赛二等奖。说起来,也是跟在梦中似的~没有想过真的可以进去国赛,也算是吃到了赛道的福利了。在华东赛区和总决赛的作品演示室看到他们的作品,看的我都自卑了,很高级,我们的作品很简陋,太简陋了,搞得我都想跑了 ~
我负责的是写APP和数据大屏,但是连整合单片机的部分都是我来写的,一个字“累”!写鸿蒙APP,也是只学习了三天ArkTs就直接开始写了,ArkTs也是基于TS来的,与JS相对,TS确实简单很多,我主要是有基础啦。总结就是,UI很烦很烦!!!没有艺术细胞的我,画UI简直是酷刑!!!
整合单片机的也是一个折磨,两个队友的代码习惯不一样,不能直接调用函数,而且出现的bug最多的就是单片机……语音,WIFI,LoRa这部分都是我来的,有时候LoRa很奇怪,节点能发数据,但是网关收不到,在华东赛区的时候出现这个问题,吓得我手都在抖哈哈哈。
数据大屏这部分没啥好说的,用的是低代码,会搞Http请求就没有任何问题了,挺简单的。
在总决赛的之前,临时买了一个ESP32Cam,缺点就是卡(供电需要5V2A的,他的烧录板没有!!!),清晰度倒 ...
野火 STM32
未读一、EXTI介绍外部中断/事件控制器(EXTI)管理控制器的23个中断/时间线,都有一个对应的一个边沿检测器,实现输入信号的上升沿和下降沿检测,都可以实现对每个中断/事件进行单独配置,可以单独配置中断或事件和触发事件的属性。
(EXTI是在APB2总线上的)
1、红色虚线和绿色虚线分别是 产生中断的线路,信号流入到NVIC控制器。
2、绿色虚线是产生事件的线路,输出一个脉冲信号。
3、输入线,EXTI有23个中断/事件输入先,可以为任意一个GPIO,也可以是外设的事件。
4、边沿检测电路,根据上升沿触发寄存器(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位控制信号触发。
5、软件中事件寄存器(EXTI_SWIER),允许程序控制可以启动中断/时间线。
6、中断屏蔽寄存器(EXTI_IMR),可以简单控制EXTI_IMR来实现产生中断的目的。
7、挂起寄存器(EXTI_PR),内容输出到NVIC,实现系统中断事件中断控制。
8、事件屏蔽寄存器(EXTI_EMR),控制它来实现是否产生事件的目的。
二、编程要点1、 ...
野火 STM32
未读一、中断概述中断时出现某些意外需要主机干预,机器能自动停止运行的程序,转入新的处理的程序,处理完之后返回程序被暂停的程序,继续运行。
异常就是中断,中断就是异常。
异常分为:系统异常和外部中断。
二、NVIC介绍NVIC是嵌套向量中断控制器,控制芯片中断的功能。
一般来说,使用ISER(使能中断)、ICER(失能中断)和IP(设置中断优先级)寄存器。
(不常用)
三、优先级中断优先级寄存器NVIC_IPRx,用来配置外部中断的优先级。如果抢占优先级相同,九比较子优先级,如果都相同,比较硬件中断编号,编号越小,优先级越高
四、优先级分组优先级分组由外设SCB的应用程序中断和复位控制寄存器AIRCR的PRIGROUP[10:8]决定,主优先级=抢占优先级
12345678910111213141516171819202122/*** 配置中断优先级分组:抢占优先级和子优先级* 形参如下:* @arg NVIC_PriorityGroup_0: 0bit for 抢占优先级* 4 bits for 子优先级* @arg NVIC_PriorityGroup_1: 1 bit f ...
在wsl的ubuntu安装idf遇到没有串口的报错,是因为wsl不自带usb的驱动,需要手动安装
教程使用他人的:https://blog.csdn.net/qq_40695642/article/details/127270039
华为云IOT连接
未读ESP32连接华为云我使用的是arduinoied所写的代码,要注意,在mqtt请求华为云中,需要写心跳间隔,不然上云不了(client.setKeepAlive(60); //心跳间隔,很重要!!!)。代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147#include <ArduinoJson.h>#include <WiFi. ...