一、数据结构的分类
数据:更多的是非数值型的数据、视频、音频
结构:逻辑结构、存储结构
研究的是非数值型数据的逻辑结构、存储结构及其操作
1.逻辑结构(抽象的数据)
2.存储结构(数据在计算机中存储的方式)
顺序存储:数据在逻辑上相邻,在物理(指存储地址)上也相邻
链式存储:数据在逻辑上相邻,在物理上不相邻
索引存储:(相当于电话簿),就是有冲突的哈希存储
哈希存储:根据要查询的内容,直接定位到本人
3.相关操作
创、销、增、删、改、查、导入、导出
C语言:程序的基础
数据结构:高效的写程序
二、线性关系
1.顺序存储(顺序表)
特点:大小固定;表空不能取,表满不能存
定义:
1)顺序表的实现
(1)创建顺序表
(2)插入元素
(3)删除元素
按位删除
按值删除:(先查找该元素,找到后再删除)
system();
(4)显示顺序表
(5)查询顺序表
基于显示做修改
(6)销毁顺序表
(7)修改顺序表内容
直接进行赋值
(8)导入和导出
同文件IO
(9)Makefile
2.链式存储
如何让不连续的空间连续起来:通过地址/指针来操作
1)链表的分类
是否有头结点:带头结点的链表、不带头结点的链表
是否循环:循环链表、不循环链表
按方向分类:单向链表、双向链表
(1)带头节点的不循环单链表
定义:
①单链表的创建:
②单链表的插入:
头插
中间插
尾插
③单链表的删除
头删、尾删
中间删
④单链表的销毁
⑤单链表的显示
⑥单链表的逆置
(2)带头结点的不循环双向链表
①双链表定义
②双链表的创建
③双链表的插入
④双链表的删除
⑤双链表的显示
⑥双链表的销毁
头删
3)静态链表
不用指针进行操作,改用二维数组的方式进行访问
3.受限的线性表
受限的地方:操作收到了限制
1)栈
特点:只能从栈顶进行操作,先进后出(FILO)
(1)顺序存储
例如:printf()的存储方式为栈,理解为右输入
(2)链式存储
限制了插入和删除的位置的单链表
栈的入栈头插、头删
2)队列
特点:只能从队尾插入,队头删除,先进后出(FIFO)
(1)顺序存储
本质还是顺序表,但是限制了插入和删除的位置:在队尾入,队头出
数组:用来保存数据
一个表示队尾,一个表示队头
队的定义
(2)链式存储
单链表的 尾插、头删 头插、尾删
三、树
1.定义(1对多)
树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件:
有且仅有一个特定的称为根(Root)的节点
其余节点可以分为m(m≥0)个互不相交的有限集合T1、T2、T3、......、Tm,其中每一个集合又称为一棵树,并称其根的子树
树叶:度数为零的节点称为树叶或者终端节点,度数不为零的节点称为分支节点
内部节点:除根节点外的分支节点称为内部节点
树根:根节点
树的度数:一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数
层数:节点的层数等于父节点的层数加一,根节点的层数定义为1。树中节点层数的最大值称为该树的高度或者深度
边数:一个节点系列k1、k2、...、ki、ki+1,并满足ki是ki+1的父节点,就称为一条从k1到ki+1的路径,路径长度为ki+1-1,即路径中的边数
2.二叉树
最大的度数为2,严格区分左右孩子,就算只有一个子树也区分
将一个普通的树转化为二叉树的方法
遵循:左孩子,右兄弟的原则
1)性质
2)顺序存储
先把要存储的二叉树,转换成满二叉树,然后对满二叉树进行存储
存储原则:从上到下,从左往右依次存入
优点:构建简单,访问方便
缺点:浪费空间
3)链式存储
树节点的结构:
4)创建树
不带头结点
5)树的插入
6)树的遍历
7)线索二叉树
8)赫夫曼二叉树:最优二叉树
9)平衡二叉树
四、图(多对多)
按照有无方向:有向图 无向图
按照有无权值:有权图 无权图
1)顺序存储
有向无权的图的顺序存储
无向有权
有向无权图
有向有权图
2)链式存储
五、算法
是一个有限语句、指令的有序集合
程序 = 数据结构 + 算法
1.算法的特性
2.评价算法的好坏
1)时间复杂度
2)空间复杂度
3.常用的算法
1)查找
2)二分查找
六、哈希表
1.冲突
2.解决冲突
链地址法
3.排序
内部排序