C++数据结构_单链表的实例剖析与应用【6】
单链表
👍要想写单链表,首先得搞明白链表的概念
链表:是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
链表节点:链表节点是链表的单元,分为头节点和子节点,头节点是链表的第一个节点,子节点是在头节点其后的节点。
上面是简易的结构图,虽然丑了些……将就看吧。
手搓一个单链表定义结构体1 . 先定义一个结构体作为链表的结构2 . 一个链表的节点被分为两个区域,一个是数据域(存放数据),一个是指针域(用于指向下一个链表节点)3 . 这里我们在数据域声明两个变量,用于储存学生的名称和年龄。随后是指针域,因为这个指针属于这个结构体 ...
Butterfly_一图流背景与页脚美化
一图流背景1.一图流背景简单来说就将背景作为文章的顶部封面,相当于把原有的封面去除了,这样看起来会更加清爽。2.本站参考了博主闪闪发光的 ZZZ:Hexo+Butterfly 主题一图流背景与顶部图修改
效果图:
代码1.将主题文件中的index_img:设为transparent透明。2.在background:处设置自己喜欢的背景。
12345678910# The banner image of home pageindex_img: transparent————————————————————————————————————————————# If the banner of page not setting, it will show the top_imgdefault_top_img: false # The banner image of archive pagearchive_img: false......# Website Background (設置網站背景)background: url(/img/background/g.jpg) top ...
分享我在电脑内的学习与开发环境
Google Chrome插件iTab 新标签页1 . iTab是一款免费无广告的组件式浏览器主页插件。2 . iTab 新标签页可能是我见过最美观的主导航页面了,你可以在该主页内自定义自己常用的网站快捷方式,也可以添加一些小组件,它还提供了分层页面,帮助你将主页的网站快捷方式进行分类。3 . 多的不说,iTab功能太多了,且还保持着页面的整洁。我只能说浏览器扩展的唯一真神!!!
4 . 下载链接:https://itab.link/?from=itab5 . 下载完成后,只需要将文件拖到Chrome浏览器的扩展管理页面chrome://extensions/内,并启动插件即可。
Cat-catch1 . 猫抓(cat-catch) 是一款开源的资源嗅探扩展,能够帮你筛选列出当前页面的资源。2 . 它能够将你正在访问的页面内的资源(如mp3,mp4,png,gif……等资源)抓取出来,并且可以直接下载该资源。3 . 当然了,该插件只能获取非会员的资源,毕竟非法抓取资源是需要追究侵权责任的。
4 . 官方下载:https://chrome.google.com/webstore/de ...
绝区零开服至今体验闲谈
~ 欢迎来到新艾利都 ~
1 . 说真的,这是我第一次成为米家游戏的开服玩家,虽然四年前也玩过了崩坏3,但那个时候不管怎么玩都已经落后其他玩家很大距离了,甚至还养了一堆没用的角色……。开服玩家的优势就是可以领先一些玩家一段距离,当然这也得看自身能力,或者氪金能力,所以……2 . 自从听到绝区零会在7月4日公测,其实这个时候我就已经开始放弃崩坏三了,打算把精力全都投入到绝区零当中去。
3 . 官方说是7月4日上午10点开服,但实际上为了降低崩服的风险,开服时间比预定提前了几个小时,所以当我10点多登录游戏账号的时候,我的UID已经到达八位数了(UID:18450689),也能理解,毕竟是个万众瞩目的游戏。
4 . 这里要说的是,入坑绝区零的首要因素是:这款游戏的画面风格我很喜欢,现代风,赛博风,同时参入了日美元素。这相对于原神那种玄幻风格的简直不要太棒。
游戏体验剧情1 . 开服到现在差不多玩了一个月1了,就这么说吧,游戏不论是场景细节还是打斗特效以及人物刻画都是十分细节精湛,很可惜我的不是电脑,如果是高配电脑的话,画面会更加高清细节,手机的话勉勉强强。2 . 主线剧情还是挺有代入感 ...
C++结构体的用法浅析【5】
C++中的结构体还是挺有必要记录一下,写个笔记的。它和类十分的相似,所以在这里需要做个具体的区分。结构体和类最大的区别就是:结构体的成员默认是完全公开public的,而类则默认是私有`private的。
结构体1 . C++中的结构体(Struct)是一种数据结构,可以将创建好的结构体作为一个新的数据类型来使用。
2 . 结构体是一个单一名称下不同数据类型的变量的集合。它与类相似,两者都保存着不同数据类型的数据集合。3 . 通常情况下,当我们想多个同一属性的变量,在不使用类和结构体的情况下,我们需要声明多个变量来实现这些属性,而为解决这一不优雅的操作,结构体应运而生,它运允许在一个结构体内定义多个属性, 且将不同类型的数据项组合成一个单一的实体。结构体通常用于将数据分组,以便可以轻松地作为一个单元来处理它们。
语法1234struct [structName]{ member-list} [declarators];
struct:结构体关键字
structName:结构体名称
member-list:成员列表(在这里定义成员数据)
declara ...
C++数组及其基本特征的浅层解读【4】
在Python或者是C#接触数组的时候可没那么多要注意的点,到了C++,好家伙,全是知识点。
这里我也懒得写太多原理性的东西,直接记一下基本常识和怎么去用就行。
声明数组1 . 声明一个数组其实就是告诉编译器申请一个数组变量。2 . 和C#一样,它的声明格式为:Type VarName[];,不难理解,在变量名后面加个[]中括号,就表示它是个数组。3 . 例如我要声明一个整数数值:
1int IntArray[];
4 . 当然,也可以声明各种数据类型的数组
12345int VarName1[]; // 声明一个整数数组double VarName2[]; // 声明一个高精度浮点数数组float VarName3[]; // 声明一个浮点数数组string VarName4[]; // 声明一个字符串数组char VarName5[]; // 声明一个字符数组
4 . 但要注意的是 当数组的类型为int,那么它的元素只能是整数类型的数据,是什么类型的数值,就是什么类型的数据。
初始化数组1 . 声明一个数组后,当我们需要使用它的时候就需要对其进行初始化,也就是你要 ...
C++利用mt19937算法自定义一个随机数生成方法【3】
怪不得说C++难学,这里连个随机数生成器都要折腾好久,要是换做C#,一个Random()方法就解决了。话说虽然C++继承了C语言的Rand()函数,但我想说的是,用它生成的随机数的概率精度是真的低。不过到了C++11后,标准库新增了一个新的随机数生产方法,mt19937,下面就来大略的分析和简练一下这个方法。
MT19937随机数生成器1 . mt19937随机数生成器采用的是梅森旋转算法(Mersenne twister)来达到生成随机数,这个算法可以快速产生高质量高精度的32位伪随机数,2 . 使用该算法生成的随机数不仅质量高,速度也快出其他生成器,3 . 看名字也知道,它的取值范围是:2^19937-1,也就是19937的2次方减去1,这个数值非常大,以至于它远远超出了常规计算机和编程语言能够表示的整数范围。实际上,这个数字的位数将非常惊人,远远超出了任何标准整数类型的范围,所以在编程时,已经没有弄清它的取值范围的必要了。
4 . 在C++中,可以通过#include <random>来引入该标准库。5 . 为了保证每次运行时输出的随机数不一样,我们需要使用tim ...
C++指针详略【2】
指针
指针,是C/C++语言中的一个重要概念及其特点。指针也就是内存地址,它允许你直接操作内存地址。指针可以用来访问和修改内存中的数据,实现动态内存分配,以及实现一些高级编程技术,比如函数指针、指针数组等。
在计算机中,所有的数据都是存放在存储器中的,不同的数据类型占有的内存空间的大小各不相同。内存是以字节为单位的连续编址空间,每一个字节单元对应着一个独一的编号,这个编号被称为内存单元的地址。比如:int 类型占 4 个字节,char 类型占 1 个字节等。系统在内存中,为变量分配存储空间的首个字节单元的地址,称之为该变量的地址。地址用来标识每一个存储单元,方便用户对存储单元中的数据进行正确的访问。在高级语言中地址形象地称为指针。
Microsoft文档 C++指针
声明指针变量1 . 我们可以声明一个指针变量用来专门存储一个值的内存地址。2 . 指针变量是一个特殊的变量,只能用来存储指针类型的值。3 . 我们只需要在正常声明变量的基础上,在变量名前面加一个*号即可,例如:
12// 创建指针变量int * pointer;
4 . 这样,我们就声明了一个用于存放整数类 ...
C++头文件与命名空间的深入浅出【1】
1 . 虽然我学过一段时间的C#,但当我第一次转入到C++的时候,说实话,开始就被头文件给整懵逼了,不过由于C#是在C/C++的基础上衍生的,除了个头文件和一些没见过的点外,后续学起来会相对轻松点。2 . 所以我接下来要说的是头文件和命名空间……
头文件1 . 头文件(Header Files)是C或C++等编程语言中,用于声明函数、变量、宏和类型定义的文件,它们通常以.h或.hpp等扩展名结尾。头文件使得程序员能够在多个源文件中使用相同的函数和类型定义,而不必重复编写代码。2 . C/C++提供了一套标准库,使用的时候需要用预处理指令#include将其引入,这就被称作头文件,当然,开发者也可以自定义一个函数库,同样使用预处理指令#include将其引入,它的功能和Python的模块导入代码import很相似。3 . 说的直白点,为了高效,头文件可以将已经写好的外部函数库或者标准库引入,这样可以大幅度减少代码的重复编写,提高开发效率和代码的可维护性。头文件的使用允许开发者在程序的不同部分重用已经定义好的代码,例如函数、类、模板等。这种重用机制不仅减少了代码冗余 ...
JavaScript event事件对象
事件对象1 . JavaScript 中,事件对象是一个特殊的对象,它包含了与当前事件相关的所有信息和方法。每当一个事件被触发时,这个事件对象就会被创建并传递给事件处理函数。2 . 通过事件对象,我们可以更加精确的获得到当前事件的详细信息,也可以通过对象的方法做出一些事件处理操作。3 . 事件对象在事件发生时就会被创建,并传递给事件处理函数,JavaScript中用event来表示这个事件对象。
常用属性
event.type:返回当前 Event 对象表示的事件的名称event.target: 返回触发此事件的元素(事件的目标节点)event.currentTarget:返回其事件监听器触发该事件的元素event.bubbles:返回布尔值,指示事件是否是起泡事件类型
1 . 我们可以将它们输出一下,实例看看四个分别起到什么样的作用:
123456789101112131415<body> <input name="main" type="button" value="按钮"></bod ...