- 博客(60)
- 收藏
- 关注
原创 嵌入式学习-硬件基础-Day02
同时,也会有一小部分载流子与基区的少数载流子复合。由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的,易受干扰。任何的机械按键都会有抖动,而且人手按下抬起并不是一瞬间的,人抬手是需要反应时间的,所以会导致按下的高电平时间过长,导致多次误进if判断语句,所以会多次切换状态,导致误判。因为没有上拉和下拉,所以当IO口没有接输入的时候,此时的电平状态会是一个不确定的值,完全由外部输入决定。
2024-12-25 15:13:01
1056
原创 嵌入式学习-硬件基础-Day01
BL (Branch with Link):这个指令不仅跳转到指定的地址,还将当前指令的下一个指令的地址(即返回地址)保存到链接寄存器(LR,通常是R14)中。机器码(二进制)是处理器能直接识别的语言,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的,不同的处理器机器码不同,所以机器码不可移植。指令流水线机制的引入确实能够大大的提升指令执行的速度,但在实际执行程序的过程中很多情况下流水线时是无法形成的,比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等。
2024-12-25 15:06:57
1332
原创 嵌入式学习-QT-Day11
默认为Debug模式,也是平常开发和调试使用的模式,这样的模式生成的可执行文件中包含了程序的各种信息、例如调试信息、未使用的变量等等,这样的程序合适开发阶段使用,可执行文件的体积比较大,运行速度较慢。平常的开发环境中具有Qt的源代码,程序运行时通过调用源代码接口可以正常执行,但是并不是所有的计算机都安装了qt的开发环境,在这些计算机中要运行Qt的exe文件,则需要在。Release模式的exe可执行文件在构建目录的release文件夹中,需要注意的是,两种模式下的构建目录默认是不同的。
2024-12-25 14:50:45
687
原创 嵌入式学习-QT-Day10
OpenCV(Open Source Computer Visio n Library)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能。在灰度图像中,每个像素只包含一个灰度值,而不是彩色图像中的红、绿、蓝三个通道。检测人脸是靠OpenCV的级联分类器来完成的,级联分类器本身并不仅仅能查找人脸,理论上可以查找任何的物体。它有助于减少数据维度,简化图像处理算法,并提供更好的对比度和亮度信息,使图像特征更容易分析和识别。点击项目的小锤子图标,重新构建,使项目构建出构建目录。
2024-12-25 14:47:33
879
原创 嵌入式学习-QT-Day09
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。表示一个基于TCP的服务器,需要注意的是,此类直接继承QObject类,不继承QIODevice类,因此不具备任何的IO能力。●表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。所有通知类的,我们应该第一时间想到的就是信号槽。
2024-12-25 14:40:34
1004
原创 嵌入式学习-QT-Day08
推荐使用这种方式,这种方式需要先编写有占位符的预处理SQL语句,交给Qt,Qt内部就知道要执行的SQL语句格式,然后在进行参数与占位符的替换,最终执行。Qt本身并没有数据库的功能,但是Qt支持调用其他主流的数据库产品,并且这些数据库产品指定了统一的Qt接口,实际上使一种数据库的中间件。增删改操作都需要录入用户输入,然后把用户输入的数据组装成SQL语句,最后执行。数据库操作信息类,用户手机数据库底层传递到Qt中的错误信息的。数据库相关类,用于一个数据库的连接。数据库的操作类,可以操作SQL语句。
2024-12-25 14:36:59
719
原创 嵌入式学习-QT-Day07
在实际开发中,两个线程不可能毫无关系的前提下各干各的 ,最常见的情况是主线程分配一个耗时的任务给子线程,子线程需要把耗时任务的执行情况反馈给主线程。之前说过的数据库就是一种数据持久化的方式,虽然嵌入式使用的SQLite数据库已经是轻量级数据库了,但是相对于其他技术,还是略显冗余。进度条到100时,输出提示框。在默认情况下,Qt的项目是单线程的,这个自带的线程用于处理程序的主要任务和UI交互,也被称为主线程或者UI线程。主线程以外的线程都是子线程,子线程不能执行主线程的ui操作,只能执行耗时操作。
2024-12-25 14:26:20
779
原创 嵌入式学习-QT-Day06
如果对象a作为对象b的构造函数的parent参数时,表示对象a是对象b的父对象,这是一种内存回收的依赖关系,即对象b跟随对象a一并销毁。QDialog的Qt源码中,派生类往往都是一些在特定场合下使用的预设好的对话框窗口,这些窗口的使用无需创建对象,直接使用静态成员函数弹窗,使用函数的返回值作为这个窗口的结果。这种情况最佳的解决方案是信号槽传参,子对象发射带参数的信号函数,父对象使用带参数的槽函数接收。事件是Qt的一种底层机制,经过层层筛选,程序员可以在传递的层级中检测或者处理这些事件。
2024-12-25 14:20:24
1304
原创 嵌入式学习-QT-Day05
Qt重写了C++的STL中的容器类,相比于C++STL的容器类,Qt的容器类更轻巧、安全、易于使用。因为Qt的容器类进行了速度和存储的优化,减少了可以执行文件的生成体积,几乎全面兼容STL容器类的API接口,并且是线程安全的,可以同时被多个线程访问。Qt是一个跨平台的开发框架,所以必须要保证各个平台的数据类型长度保持一致,因此Qt为常见的基本数据类型重新定义了新的类型符号。计算机无法做到真正的随机数。重新实现了STL中std::map类,QMap也兼容map类的api,也增加了一些新的Qt的API。
2024-12-25 14:14:39
754
原创 嵌入式学习-QT-Day04
可以使用QButtonGroup组件对多个按钮进行分组,这是一个按钮的逻辑分组,没有任何的UI效果,其主要的目的是用一个信号槽同时监控多个按钮对象的状态。QLabel用于显式文字和图片,需要注意的是,QLabel不能与用户进行交互(不能点击),只能展示使用,因此没有合适的信号函数。需要注意,尽量在项目开发之前使用PS等软件预先处理好图片,减少代码运行时的开销,提升代码的运行效率,减少资源占用。把图片导入到项目中,成为项目资源,直接使用Qt的虚拟资源路径导入图片,可以在任何环境使用这些资源图片。
2024-12-25 14:10:04
1122
原创 嵌入式学习-QT-Day02
嵌入式学习-QT-Day02二、UI入门1、QWidget类1.1修改坐标1.2修改宽高1.3修改样式2、添加子组件二、UI入门1、QWidget类Qwidget类是所有组件和窗口的基类,内部包含了一些最基础的界面的特性。常用的属性:1.1修改坐标x : const int横坐标,每个图形的左上角为定位点。横轴的零点在屏幕的最左边,正方向向右。y : const int纵坐标,每个图形的左上角为定位点,纵轴的零点在屏幕的最上边,正方向向下。
2024-12-25 13:59:08
562
原创 嵌入式学习-QT-Day01
在C语言与C++中,无论是printf还是cout输出的内容都不群分前后台,但是Qt中输出的内容是区分前台后台的,前台指的是图形用户界面,用户可以直接通过软件界面看到的内容。Qt是一个基于C++的图形用户界面(GUI)开发框架,但是Qt不仅仅能开发界面,还包含了很多的传统编程技术:多线程、数据库、图像处理、网络通信、文件IO。此文件是Qt根据当前计算机的开发环境自动生成的文件,每个计算机几乎不通用此文件,因此在提交代码的时候,先删除此文件。在项目管理界面,直接点击完成,可以看到项目中包含的文件。
2024-12-25 13:53:50
990
原创 嵌入式学习-C嘎嘎-Day08
1. nullptrnullptr是C++11的新关键字用于取代NULL。上面的代码中调用第二个函数比较合理但是实际运行调用的是第一个函数因为NULL就是0。使用nullptr可以区分0和空。2类型推导在C++11中可以使用auto和decltype关键字进行类型推导。使用decltype推导表达式类型时编译器只会计算类型而不计算数值。3初始化列表C++1。
2024-11-20 19:07:52
523
原创 嵌入式学习-C嘎嘎-Day07
每少一个shared_ptr对象持有资源(资源对象销毁或资源对象解除控制),引用计数-1,直到最后一个shared_ptr对象导致计数从1变为0,此时资源销毁。auto_ptr和unique_ptr内部只有一个保存资源对象的地址的成员变量,但是shared_ptr和weak_ptr内部除了上述变量外,还有一个引用计数的成员变量。作为对auto_ptr的改进,unique_ptr对资源具有唯一控制权,不支持复制语义。weak_ptr是一个不控制资源生命周期的智能指针,是对资源的一种弱管理,主要的目的是。
2024-11-20 09:05:37
403
原创 嵌入式学习-C嘎嘎-Day06
使用throw关键字可以抛出一个异常对象,throw可以抛出任何类型的异常对象,抛出到当前代码调用的上一级。异常如果不在当前层次进行处理,也可以交给上一级进行处理,但是如果主函数中还没有正确处理,则程序终止。可以使用多个catch块配合try块进行异常捕获,catch的顺序要求。所有抛出的派生类异常对象都可以被其基类异常类型捕获。C++为常见的异常类型进行层次划分,通过继承实现。还可以单独使用一个...捕获所有异常,但是不推荐。情况3:没有抛出异常,正常直接try块结束。派生类异常先捕获,基类异常后捕获。
2024-11-20 09:03:12
571
原创 嵌入式学习-C嘎嘎-Day05
继承构造是C++11的新特性,通过继承构造的语句,可以让编译器为派生类添加n个(n为基类的构造函数数量)构造函数,每个派生类的构造函数都与基类的构造函数参数相同,并透传同参数的构造函数,因此继承构造的本质是编译器自动生成的透传构造。当基类的引用或指针指向派生类对象时,编译器会在内部产生一段检查对象真正类型的代码,程序在运行时会检查真正的数据类型,找到虚函数表指针,通过查表找到调用的函数地址,从而形成多态的调用效果。基类的保护成员和公有成员,继承到派生类后,仍然作为派生类的保护和公有成员。
2024-11-19 09:05:54
1037
原创 嵌入式学习-C嘎嘎-Day04
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。迭代器可以遍历所有的容器,在创建迭代器时,可以使用容器的begin和end函数,分别拿到一个指向第一个元素和最后一个元素之后的迭代器。deque是一种均衡的顺序容器,几乎兼容所有的vector和list的接口,性能介于二者之间(两端存取性能较强)。2.2.1.4 deque 队列。
2024-11-15 20:02:15
615
原创 嵌入式学习-C嘎嘎-Day03
但是某些情况下,需要频繁读写类的成员变量,特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。函数可以重载,在C++中运算符也可以重载,运算符默认的操作类型只能是基本数据类型,但是对于很多用户自定义类型,也需要类似的运算操作,此时可以重载运算符,赋予这些运算符新的功能,执行对于自定义类型的运算操作。赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=友元函数是一种在类内说明,但本身属于类外的函数,可以访问类内所有成员。
2024-11-15 19:57:35
1030
原创 嵌入式学习-C嘎嘎-Day02
上面代码中,非静态的变量abc要跟对象绑定,对象的创建严格的讲是在运行时发生的,因此上面的变量c在编译时无法确定,这与constexpr的含义冲突,编译出错。拷贝构造函数实现的功能是,以一个已经存在的对象为基础,新创建的对象与已经存在的对象数据相同,由于封装特性,这两个对象各自是一个整体,数据是两份的。const修饰对象,表示该对象为常量对象,这样的对象不能修改成员变量的数值,也不能调用非const的成员函数。,函数执行完成后,此变量不会被销毁,下次调用此函数时,继续使用已经创建的静态局部变量,直到。
2024-11-15 19:45:43
953
原创 嵌入式学习-C嘎嘎-Day01
面向过程的语言,关注的重点是“算法”,可以认为“算法”是一系列有序的步骤,只要按照这个步骤做事,就能得到预期的结果,因此面向过程语言编写的程序,通常是一系列有序的语句,这种思维方式更接近于计算机执行命令的本质。面向对象的语言,关注的重点是“对象”之间的关系,对象的本质是一系列由于某种联系聚焦在一起的数据,这种思考方式更接近人类社会运行的本质,因为对过程的操作变成了对对象的管理。C++在C语言的基础上进行了。内联函数在编译是,直接展开函数体到主函数中,因此可以提升程序的执行效率,因为它消除了函数调用的开销。
2024-11-11 20:16:10
1184
原创 嵌入式学习-网络高级-Day03
基于webserver的工业数据采集HTTP协议http简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于Web Browser(浏览器)到Web Server(服务器)进行数据交互的传输协议。HTTP是应用层协议HTTP是一个基于TCP通信协议传输来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP协议工作于B/S架构。
2024-11-11 19:34:41
1096
原创 嵌入式学习-网络高级-Day01
对于读数据以及写单个来说,在主机询问报文里面报文头中字节长度固定,都是0x0006,(1个字节的单元标识符,1个字节功能码,2个字节的地址,2个字节的数据)输入寄存器,这个和保持寄存器类似,但是也是只支持读而不能写。报文头------功能码-------起始地址-------数量--------字节计数--------数据。报文头(字节长度可能发生变化)------功能码------字节计数-------数据。报文头------功能码-------地址-------数据/断通标志(2个字节)
2024-11-06 20:27:04
1360
原创 嵌入式学习-网络-Day07
很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的。世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的。数据库是“按照数据结构来组织、存储和管理数据的仓库”。内的、有组织的、可共享的、统一管理的大量数据的集合。【腾讯文档】sqlite基础SQL语句使用。数据库是存放数据的仓库。命令来测试是否安装成功。安装完成后,可以使用。
2024-11-05 14:06:21
289
原创 嵌入式学习-网络-Day06
第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1,ack=u+1);第二次握手:服务器端收到SYN包,确认客户端的SYN,发送ACK包(ACK=1,ack=J+1),同时发送一个SYN包(SYN=1,seq=K),进入。第四次挥手:主动方收到FIN包,回复一个ACK包(ACK=1,ack=w+1),被动方收到主动方关闭的ACK包后,关闭连接。第一次挥手:主动关闭方发送一个FIN包(FIN=1,seq=u)给被动方,进入FIN_WAIT_1状态。所有非应答包的数据段,都有seq。
2024-10-31 20:24:29
815
原创 嵌入式学习-网络-Day05
实现某些特定协议要求,比如某些设备规定,发送请求数据后,如果多长时间后没有收到来自设备的回复,需要做出一些特殊处理。多播方式既可以发给多个主机,又能避免象广播那样带来过多的负载(每台主机要到传输层才能判断广播包是否要处理)192.168.1.0(255.255.255.0)最大主机地址:192.168.1.255(广播地址)过多的广播会大量占用网络带宽,造成广播风暴,影响正常的通信。2.setsockopt 缺省套接字不允许发送广播数据,需要设置属性。如果同时发给局域网中的所有主机,称为广播。
2024-10-30 19:05:06
631
原创 嵌入式学习-网络-Day04
(根据poll函数第一个参数来定,如果监听的事件为1个,则结构体数组元素个数为1,如果想监听100个,那么这个结构体数组的元素个数就为100,由程序员自己来决定)机制,将新连接的客户端描述符增加到描述符表中,只需要一个线程即可处理所有的客户端连接,在嵌入式开发中应用广泛,不过代码写起来稍显繁琐。每来一个客户端连接,开一个子进程来专门处理客户端的数据,实现简单,但是系统开销相对较大,更推荐使用线程模型。fork之前打开的文件,fork之后拿到的是同一个文件描述符,操作的是同一个文件指针。
2024-10-30 18:59:09
901
原创 嵌入式学习-网络-Day03
--->当键盘敲字打印键盘的字,当鼠标动的时候打印鼠标文件里的内容。---->当键盘敲字打印键盘的字,当鼠标动的时候打印鼠标文件里的内容。假设妈妈有三个孩子,分别不同的房间里睡觉,需要及时获知每个孩子是否醒了,如何做?练习3:在实现练习2的基础上,再检测所有用于通信的acceptfd实现并发通信。假设妈妈有一个孩子,孩子在房间里睡觉,妈妈需要及时获知孩子是否醒了,如何做?-----------------------------(创建服务器步骤)阻塞式IO、非阻塞式IO、异步通信IO、IO多路复用。
2024-10-28 19:54:13
620
原创 嵌入式学习-网络-Day02
netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。练习:实现如客户端发送"hello"给服务器端,服务器接着给客户端回,"recv:hello!:Time To Live,从源到目的,每经过一个路由器,TTL减1,当TTL=0,包丢掉。创建数据报套接字(socket, (, SOCK_DGRAM,)) ------》有手机。实现循环服务器,服务器不退出,当链接服务器的客户端退出,服务器等到下一个客户端链接。
2024-10-26 17:25:23
926
原创 嵌入式学习-网络-Day01
DOS:即 Denial of service,拒绝服务的缩写,拒绝服务,Dos 攻击即攻击者想办法让目标机器停止提供服务或资源访问,这些资源包括磁盘空间、内存、进程甚至网络带宽,从而阻止正常用户的访问。所以为了数据安全,不能连接因特网,需要用一条自己的专用线路来传输数据,这条线路上只有自己人,不会有其他人接入,且距离很远,这个网络就叫 “广域网”。广域网,就像是大马路,分支可能少,但类型多,像国道、省道、高速、小道等,连接了很多大的局域网。一端连接运营商的入户线缆,一般是光纤,一端连接你自己的路由器。
2024-10-26 17:22:44
2090
原创 嵌入式学习-IO进程-Day07
4)消息队列是存在Linux内核中,以链表形式来存放消息,消息队列对每个数据都有一个最大长度的限制。System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。2)消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等。1)消息队列是IPC对象的一种,由消息队列ID来唯一标识。3)消息队列可以按照类型来发送(添加)/接收(读取)消息。而Posix信号灯指的是单个计数信号灯。创建或打开信号灯集(semget)删除信号灯集:semctl。初始化信号灯集semctl。
2024-10-22 20:33:47
480
原创 嵌入式学习-IO进程-Day06
无名管道原理图无名管道的特点1.只能用于有亲缘关系之间的进程2.无名管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、write函数.3.无名管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1]。其中fd[0]固定用于读管道,而fd[1]固定用于写管道。4.半双工的通信模式,具有固定的读端和写端单工:只能单方向传递信息(收音机,广播,电视)半双工:同一时刻只能接收或者发送(对讲机)
2024-10-22 20:30:00
721
原创 嵌入式学习-IO进程-Day05
信号量代表的是某一类资源,它的值表示系统中该资源的数量,信号量>0的话,表示有资源可以使用,可以申请到资源,继续执行程序,信号量<= 0的话,表示没有资源可以使用,无法申请到资源,阻塞。互斥锁:通过互斥锁可以实现互斥机制,主要用来保护临界资源,每个临界资源都由一个互斥锁来保护,线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
2024-10-19 16:17:01
948
原创 嵌入式学习-IO进程-Day04
但是需要考虑临界资源(临界资源包括同一个文件,全局变量等)访问的问题,进程间的通信相对复杂,需要借助进程间的通信机制(借助3g-4g的的内核空间)vfork(): 保证子进程先运行,在调用exec()或exit()之前,与父进程数据共享,在exec()或exit()调用之后,父进程才能运行。练习:创建子进程,在父子进程中分别获取他们的进程号和父进程号,获取结束,回收子进程资源,退出进程。线程是一个轻量级的进程,为了提高系统的性能引入线程,线程和进程都参与统一的调度。增大进程创建文件时权限,提高灵活性;
2024-10-19 16:09:54
1084
原创 嵌入式学习-IO进程-Day03
进程创建后,进程进入就绪态,当CPU调度到此进程时进入运行态,当时间片用完时,此进程会进入就绪态,如果此进程正在执行一些IO操作(阻塞操作)会进入阻塞态,完成IO操作(阻塞结束)后又可进入就绪态,等待CPU的调度,当进程运行结束即进入结束态。该类进程经常与用户进行交互,需要等待用户的输入,当接收到用户的输入后,该类进程会立刻响应,典型的交互式进程有:shell命令进程、文本编辑器等。睡眠态(等待态):可中断的睡眠态(S):处于等待状态中的进程,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态。
2024-10-16 20:57:43
1015
原创 嵌入式学习-IO进程-Day02
文件描述符都是非负的整数,取值范围(0-1023),最多产生1024个文件描述符,文件描述符被分配的时候是连续的。标准IO默认打开三个流:标准输入(stdin),标准输出(stdout),标准出错(stderr)。文件IO默认打开三个文件描述符,0(标准输入),1(标准输出),2(标准错误)文件IO默认打开三个文件描述符,0(标准输入),1(标准输出),2(标准错误)围绕文件描述符进行操作,文件描述符都是非负的整数,依次进行分配。围绕文件描述符进行操作,文件描述符都是非负的整数,依次进行分配。
2024-10-16 20:16:19
487
原创 嵌入式学习-I/O进程-Day01
带有缓存机制-》应用层读写文件-》调用内核层的函数接口-》内核层和硬件层进行交互-》拿到数据返回给缓存区-》每次调用从缓存区当中拿数据。FILE* 是一个指向 FILE 结构体的指针,这个结构体由标准库定义,用于表示一个打开的文件或输入/输出流。标准IO默认打开三个流:标准输入(stdin),标准输出(stdout),标准出错(stderr)。标准IO在系统调用之前作了二次封装增加了缓存机制,减少了系统调用的次数,提高了程序的效率。对文件的输入和输出:输入-》写文件:将内存当中的内容,写入到文件中。
2024-10-14 19:57:33
716
原创 嵌入式学习-树
(3) 数据结构中,沿着某条路线,一次对树中每个节点做一次且仅做一次访问,对二叉树的节点从1开始进行连续编号,要求每个节点的编号大于其左、右孩子的编号,同一节点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( )次序的遍历实现编号(网易)(1) 一棵二叉树有8个度为2的节点,5个度为1的节点,那么度为0的节点个数为 ( ) (网易)当2*i<=n时,有左孩子,其编号为2*i ,否则没有左孩子,本身是叶节点;(2) 深度为8的二叉树,其最多有( ) 个节点,第8层最多有( )个节点。
2024-10-11 16:05:28
1223
原创 嵌入式学习-线性表Day05-双向链表
双向链表//双向链表的节点定义//数据域//指向下一个节点的指针 next 下一个//指向前一个节点的指针 prior 先前的//将双向链表的头指针和尾指针封装到一个节点体里//思想上有点像学的链式队列//指向双向链表的头指针//指向双向链表的尾指针int len;//用来保存当前双向链表的长度操作函数1)创建一个空的双向链表2)双向链表中间插入。
2024-10-10 20:50:55
575
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人