hero image

Damone's Blog

才华是刀刃,辛苦是磨刀石,再锋利的刀刃,若日久不磨,也会生锈。

OCEAN
全新的类脑计算平台,全面覆盖科研、工程...
NCNN
NCNN 是一个为手机端极致优化的高性能神经网络前向计算框架
Mobile-LPR
Mobile-LPR 是一个面向移动端的准商业级车牌识别库
Darknet2ncnn
darknet网络模型在移动端的快速部署
NNCASE
NNCASE 是一个为 AI 加速器设计的神经网络编译器。
CNET
CNET 是一个C99开发的的面向iot设备设计的深度学习推理库
公交客流统计
客流统计系统是用机器代替人工,对公交车每个站点和每条线路的上、下车辆...
透明加密系统
透明加密在企业环境中得到了极大重视,特别是 2011 以来连续发生巨大信息...
0. 绪论

0. 绪论

0.1 数据结构基本概念

0.1.1 基本概念和术语

术语 定义
数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合
数据元素 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理,含有多个数据项
数据项 是构成数据元素的不可分割的最小单位
数据对象 具有相同性质的数据元素的集合,是数据的一个子集
数据类型 一个值的集合和定义在此集合上的一组操作的总称 {原子类型、结构类型、抽象数据类型}
数据结构 相互之间存在一种或多种特定关系的数据元素的集合

damone大约 5 分钟
1.1 线性表

1.1 线性表

线性表
线性表

1.1.1 线性表的定义:

线性表是n个具有相同特性的数据元素的有限序列。

1.1.2 线性表的基本操作

:参数代“&”表示引用,作用相当于指针,但更安全

对数据的操作:创销,增删查改


damone大约 1 分钟
1.2 线性表的顺序表示

1.2 线性表的顺序表示

1.2.1 顺序表的定义

顺序表:线性表的顺序存储,它是用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的两个元素在物理位置上也相邻

1.2.2 顺序表的特点

①随机访问:可直接通过下标访问

②存储密度高:每个节点只能存数据元素

③拓展容量不方便:即便采用动态分配方式,迁移数据时时间复杂度也比较高

④插入、删除操作不方便:需要移动大量元素


damone大约 8 分钟
1.3 线性表的链式存储

1.3 线性表的链式存储

1.3.1 单链表的定义

单链表:线性表的链式存储,它是通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它不要求在逻辑上相邻的两个元素在物理位置上也相邻。

1.3.2 单链表的特点

①不能随机访问:遍历查找访问

②存储密度不高:每个节点既要存数据元素又要存指针

③拓展容量方便:直接用建立单链表拓展

④插入、删除操作方便:知道位置直接插入和删除

1.3.3 单链表的实现方式


damone大约 6 分钟
1.4 双链表

1.4 双链表

1.4.1 单链表的定义

单链表的结点中只有一个指向其后继的指针,使得单链表要访问某个结点的前驱结点时,只能从头开始遍历,访问后驱结点的复杂度为O(1),访问前驱结点的复杂度为O(n)。为了克服上述缺点,引入了双链表。

双链表的结点中有两个指针priornext,分别指向前驱结点和后继结点。

1.4.2 双链表的实现方式

实现方式:不带头结点带头结点,一般带头结点比不带头结点好


damone大约 5 分钟
1.5 循环链表

1.5 循环链表

1.5.1 循环链表的定义

循环链表:一般包括循环循环链表和循环循环链表,如下图所示

循环链表
循环链表

1.5.2 循环链表的实现方式

实现方式:不带头结点带头结点,一般带头结点比不带头结点好


damone大约 4 分钟
1.6 静态链表

1.6 静态链表

1.6.1 静态链表的定义

静态链表借助数组来描述线性表的链式存储结构,结点也有数据域data指针域next,这里的指针是结点的相对地址(数组下标),又称游标。和顺序表一样,静态链表也需要预先分配一块连续的内存空间。

静态链表
静态链表

damone大约 1 分钟
2.1 栈

2.1 栈

2.1.1 栈的定义

是线性表结构的一种,但是栈结构的插入与删除操作都只能从同一端进行,所以栈结构是一种受限制的线性表结构,数据的插入与删除符合LIFO的原则(也就是后进先出先进后出)。


damone小于 1 分钟
2.2 栈的顺序存储

2.2 栈的顺序存储

2.2.1 顺序栈的定义

顺序栈:栈的顺序存储

2.2.2 顺序栈的实现方式

实现方式:静态分配动态分配

2.2.3 静态分配的顺序栈上的操作

顺序栈的类型描述

#define MaxSize 10
typedef struct{
	Elemtype data[MaxSize];//静态数组存放栈中元素
	int top;               //栈顶指针
}SqStack;

damone大约 2 分钟
2.3 栈的链式存储

2.3 栈的链式存储

2.3.1 链栈的定义

链栈:栈的链式存储

2.3.2 链栈的实现方式

实现方式:不带头结点带头结点,一般带头结点比不带头结点好

不带头结点:写操作代码麻烦,要区分第一个数据和后续数据的处理

带头结点:写操作代码方便,一般用带头结点,不明确的都是带头结点的

:这两种方式:只有类型描述一样,初始化不一样,

​ 判空、入栈、出栈、取栈顶元素不一样,不带头节点是s,带头结点是s->next,因为链栈以链头栈顶


damone大约 2 分钟
2
3
4
5
...
7