数据结构与算法5-单链表
0 Preview
新时代 ctfer 破防瞬间:
那个告诉我大学就可以放开玩耍就可以找对象的老师快给 👴 爪巴!🙏
这篇笔记将在两天后被我半年内比赛的wp挤出这一页了。
1 线性表的链式存储结构
1.1 链表
📖线性表中每个元素有 唯一 的前驱元素和后继元素。
不难发现我们要存储这样的结构时候,需要存储元素和元素之间的关系。
设计链式存储结构时,每个逻辑元素用一个结点 单独存储 ,为了表示逻辑关系,增加 指针域 。
所以也就有了 单链表 和 双链表 。
🔑每个物理结点增加一个指向后继结点的指针域 ➡️ 单链表。
🔑每个物理结点增加一个指向后继结点的指针域和一个指向前驱结点的指针域 ➡️ 双链表。
1.2 链表的优点
最主要的优点还是引入了 指针 。
1.2.1 插入或删除操作
顺序表:需要平均移动半个表的元素。
链表:只需修改相关结点的指针域即可,这样既方便又省时。
1.2.2 随机存取特性
查找序号i的元素的时间为O(1):
顺序表:具有随机存取特性。
链表:不具有随机存取特性。
1.2.3 存储密度
顺序表:存储密度高。
链表:存储密度相对较低。
存储密度 ...
JAVA方法和数组
0 Preview
今天比赛去了,笔记记得会很潦草,明天抽时间完善一下。
腰疼见谅。
1 方法
1.1 方法的定义
🍊方法就是定义在类中的具有特定功能的一段独立小程序。
🍊方法也称为函数。
1.2 方法的格式
12345C修饰符 返回值类型 方法名(参数类型 形式参数1,参数类型 形式参数2,...){ 执行语句; return 返回值; }
返回值类型:方法运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用方法时传递给方法的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束方法。
返回值:该方法运算后的结果,该结果会返回给调用者。
1.3 方法的特点
🍊定义方法可以将功能代码进行封装
🍊便于对该功能进行复用
🍊方法只有被调用才会被执行
🍊方法的出现提高了代码的复用性
🍊对于方法没有具体返回值的情况,返回值类型用关键字void表示,那么该方法中的return语句,可以省略不写。如果写的话就是return;
🍌方法中只能调用方法,不可以在方法内部定义方法。
🍌定义方法时,方法 ...
数据结构与算法-线性表基础
0 Preview
👴写博客就没有日更两篇过,这好像还是头一次。还都是关于数据结构的。
开学要等到十月十号,国庆节以后了,终于有一次生日是在家过的了。
👴的生日本来就很奇妙,十月八日,刚好是七天国庆节假期结束的时候,开学就要检查作业。那段时光太悲催了。
这篇博客主要记录线性表。
1 线性表
1.1 线性表定义
线性表是一个具有相同特性的数据元素的 有限序列 。
线性表具有一下特点:
有限性:数据元素个数是有限的。
一致性:所有元素性质相同,即属于同一数据类型。
序列性:数据元素由逻辑序号唯一确定。一个线性表中可以有相同值的元素。
逻辑关系:元素之间为1对1的关系。
线性表中所含元素的个数叫做线性表的长度,用 n 表示,n≥0。
n=0时,表示线性表是一个空表,即表中不包含任何元素。
1.2 线性表的逻辑表达
,,,,,,(a1,a2,…,ai,ai+1,…,an)
🍌ai(1≤i≤n)表示第 i(i表示逻辑位序)个元素。
🍌 a1 是 表头元素 a2 是 表尾元素
1.3 线性表的基本运算
1:初始化线性表InitList(&L):构造一个空的线性表L。
2:销毁 ...
数据结构与算法-算法分析(时间空间复杂度)
0 Preview
和我组队打过 CTF 的都知道,我脚本能力算是奇葩了,要说不行吧,我总能写出来脚本还都能实现功能。要说行吧。我的程序基本上都是慢的要死,大部分都是遍历查表。
之前师傅看见我的脚本,震惊的无以复加。“复杂度这么高!这玩意儿能跑出来?”
多亏我电脑配置拉满。
刚好在学数据结构和算法的时候,学到了关于算法分析的部分,记一下笔记。
1 算法分析-基本要求
算法分析目的:分析算法的时空效率以便改进算法性能。
评价一个好的算法有以下几个标准:
(1) 正确性 (Correctness ) 算法应满足具体问题需求。
(2) 可使用性 (serviceability) 算法应该很方便的使用。
(3) 可读性 (Readability) 算法应该好读。
(4) 健状性 (Robustness) 算法应具有容错处理。
(5) 效率与低存储量需求 算法应执行时间短,占用存储空间小。
我们常说的算法评判名词有:时间复杂度和空间复杂度。
这两个分析方式,都是根据占用资源来分析的:
1.1 评判方法
由于同一种算法在不同的操作系统、编程语言、机器设备上运行的时间都不同,所以很难通过运行时 ...
MYSQL-关系数据库
0 Preview
后顾一下上节课学的啥:
数据库的基础知识和环境配置,具体详见上一篇博客:
http://shangu127.top/2021/08/30/再学一次MySql/
本文涉及主要内容为 关系数据库 。
1 关系
🌳单一的数据结构–关系
现实世界的实体以及实体间的各种联系均用关系来表示
🌳逻辑结构–二维表
从用户角度,关系模型中数据的逻辑结构是一张二维表
🌳建立在集合代数的基础上
-域(Domain)
-笛卡尔积(Cartesian Product)
-关系(Relation)
1.1 域
域是一组具有相同数据类型的值的集合。
1.1.2 笛卡尔积
笛卡尔积是 域上的一种集合运算;
给定一组域D1,D2,…,Dn,这些域中可以有相同的
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn ={(d1,d2,…,dn)|diDi,i=1,2,…,n}:
1:所有域的所有取值的一个组合
2:不能重复
元组
—笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple)
分量
—笛卡尔积元素(d1,d2,…,dn)中的每一个值 ...
JAVA数据类型和运算符
0 Preview
本篇还没写完,所以篇幅比较少。再加上这些东西作为一个逆向手是必修的,所以我早就学完了。
实际上关于计算机底层的这些知识,还是CSAPP讲的更好,有需要的可以去看看我写的深入理解计算机那个系列。
http://shangu127.top/2021/07/09/csapp1/
1 标识符
1.1 标识符定义
🔑定义:java中对各种变量,方法和类的命名都叫标识符。
说的直白一点,在java中凡是自己起的名字都叫标识符,都需要遵守标识符规则。
组成:由26个英文字母大小写,数字:0-9 和符号:_ $
🔑定义合法标识符规则:
1,数字不可以开头。
2,不可以使用关键字。
🔑Java中严格区分大小写,定义标识符不限制长度。
1.2 命名规范
Java中的名称规范:
包名:多单词组成时所有字母都小写。
xxx.yyy.zzz www.shangu127.top
类名、接口名:多单词组成时,所有单词的首字母大写。
XxxYyyZzz
变量名和方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
xxxYyyZzz
常量名:所有字母都大写。多单 ...
数据结构与算法-三种结构详解
0 Preview
书接上回,这一篇
1 逻辑结构
1 集合 无关系
2 线性结构 一对一 有序
3 树形结构 一对多 开始元素唯一,终端元素不唯一
4 图形结构 多对多 所有元素都可能有多个前驱元素和多个后继元素
数据的逻辑结构是面向用户的,可以用图表和二元组表示。
二元组:二元组:B=(D,R)
B 是一种数据结构,他由数据元素的集合 D 和 D上二元关系的集合 R 所组成。其中:
数据元素的集合关系的集合(1)D=di|1<=i<=n,n>=0;数据元素的集合 R=rj|1<=j<=m,m>=0;关系的集合
序偶<x,y>(x,y∈D) x为第一元素,y为第二元素。
x为y的前驱元素。
y为x的后继元素。
若某个元素没有前驱元素,则称该元素为开始元素;若某个元素没有后继元素,则称该元素为终端元素。
序偶<x,y>表示x、y是有向的,序偶(x,y)表示x、y是无向的
2 存储结构表示
🚪 数据逻辑结构在计算机中的存储表示称为数据的存储结构,也称为物理结构。
共有四种存储结构:
🚚顺序存储结构 — 结构体数组 ...
数据结构与算法—认识知识体系
0 Preview
大二了,又开新课了,还记得大一最让我头疼的一门就是《离散数学》,听着是数学实际上还是计算机算法一类的。
现在又来了一门又像数学又像算法的:《数据结构与算法》。
实话,👴数学天生过敏,一看数学书脸色发白的那种,严重时候身上会起疹子。
重点是这门课和考研有关,我就不能轻视(虽然我大概不考研)。
所以又开了个 Tag 来写笔记。
末尾也有一些关于学习上的牢骚要发,感兴趣的可以看看。
1 建立认知体系

1.1 《数据结构与算法》拆词分析
在计算机科学中,数据结构(Data Structure)是计算机中存储、组织数据的方式。为什么数据结构和算法经常放在一起讨论?算法用来设计一种使用计算机来解决问题的方法。设计高效的算法又是怎么来实现的?在我们学习了计算机编程后,也要学习数据结构与算法这些基础内容。
看到这里 我插一嘴,这俩名词好像和 “ 文件系统 ” 有点子像。
1.2 数据结构
相 ...
JAVA环境搭建和入门
0 Preview
这个Tag是我学习Java的笔记,会记录一些我遇到的问题和知识。
最近博客要开始疯狂产出了,学习任务多了起来。
一边要继续深造 RE 和 PWN。
最近参加完 HWS夏令营 以后又对硬件感兴趣,准备鼓捣鼓捣 linux 内核和 stm逆向。
1 知识总结
首先先区分一下几个常见的关键词:
JDK: java development kit, java开发工具包,用来开发Java程序的,针对java开发者。
JRE: java runtime environment, java运行时环境,针对java用户
JVM: java virtual machine,java虚拟机 用来解释执行字节码文件(class文件)的。
JAR: 是一种软件包文件格式,通常用于聚合大量的Java类文件
2 环境搭建
2.1 JDK安装
我选择的是jdk15,不用java8是因为我平时写博客,打ctf需要用到很多只支持高版本java的程序。
很难搞。
从官网下载就行:https://www.oracle.com/index.html
安装默认。
2.2 eclipse安装
https ...
MYSQL-环境搭建以及知识汇总
0 Preview
MySql 我已经学过一次了(虽然只是入个门),增删查改基本操作也搞明白了。
贵校又安排了一门《数据库原理与应用》,既然扯到了原理,那还是需要认真学一学的。
总而言之
这门课👴还是有兴趣的,要不然也不会开着篇博客。
环境搭建方面我还是喜欢 PhpStudy 的小皮面板;
不过学校的教学使用 navicat premium
这俩环境应该可以共存。
👴认真思考了一下,虽然👴搞的不是开发不用深学数据库。但是以后👴万一要搞 iot 还是要学一下的。
0.5 知识总结
0.5.1 问题汇总
1、试述数据、数据库、数据库系统、数据库管理系统的概念。
2、试述数据库系统的特点。
3、数据库管理系统的主要功能有哪些?
4、试述数据库系统的组成。
5、试述数据模型的概念、数据模型的作用和数据模型的三个要素。
6、什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?
7、试述关系数据库的特点。
8、试述数据库系统三级模式结构,这种结构的优点是什么?
9、定义并解释以下术语:模式、外模式、内模式、 DDL 、 DML 。
答案和 ...