数据结构入门--笔记

来源:互联网 发布:seo与sem有和区别 编辑:程序博客网 时间:2024/05/20 23:58
一、基本概念
1.数据:被计算机操作的信息载体。例如字符串、声音
2.数据元素:数据的基本单位。例如一个字符串,一段声音
3.数据结构:数据之间的组织形式
二、数据结构
1.逻辑结构:是抽象的数学模型。链表有指针域,数据域。
2.存储结构:是数据实际在硬件上的表现形式。
3.数据运算:
4.分类(逻辑):
线性结构:一个接一个。例如栈、队列
非线性结构:多对多,不固定。树、图
5.存储方式(物理):
顺序:相邻的数据,存储地址也相邻
链式:相邻的数据,不要求地址相邻,但要增加指针域指向下个节点地址
三、常用的数据结构
1.数组:同一种类型的数据有序组织
2.栈:数据只在同一端进行增删操作。
3.队列:队尾进行插入,队头进行删除。循环队列,插入时,队尾指针加1然后模队长。删除时对队头进行相同运算。判断队满,若队尾指针指向队头则队满。
4.链表:使用链式存储结构。
5.树:非线性,节点最多有一个前驱,多个后继节点。
6.图:节点与节点为多对多关系
7.堆:特殊的树形结构,父节点的值永远大于或小于子节点,而根节点则是最大或最小的节点。所有子树也都是堆。
四、线性
1.定义:一组数据的有限序列。
2.顺序表结构:按照顺序存储的线性表
缺点:插入或删除需移动大量数据效率低、不适合大数据量因为需要连续的存储空间。插入期望值n/2,删除期望值(n-1)/2
优点:检索快
3.链表结构:包含数据部分(数据域)、地址部分(指针域)。数据域存放实际的数据,指针域存放下一个节点的地址。


4.栈结构:只能在一端(栈顶)进行操作。FILO先进后出。
清空栈只要将栈顶设为0.
5.队列结构:在队尾插入,队头删除。
6.串:数据元素为字符的线性表
朴素匹配:匹配长为n的主串和长为m的子串,最好情况比较次数期望值(n+m)/2,时间复杂度O(n+m)。最坏情况时间复杂度O(n*m),平均次数(n-m+2)m/2
改进匹配:
五、非线性
1.树结构:非线性层次关系。除了根节点其他节点只有一个前驱。
有序树:节点从左向右有序排列。无序树反之
森林:树的集合。
2.二叉树:每个节点最多只能有两个节点,且是有序树。
完全二叉树:只有最后一层可以不是满节点的。即只有上一层满节点后才能向下一层添加节点。完全二叉树可以直接使用顺序存储方式,顺序存储方式节点的父节点为,该节点位置除2(去掉余数)。深度为[log2n]+1
3.二叉树遍历:
先序遍历:先访问根节点,在对节点的左子树线序遍历,最后对节点的有子树先序遍历。
中序遍历:先对左子树中序遍历,在访问根节点,再对右子树先序遍历
后序遍历:先对对左子树后序遍历,再对右子树后序遍历,再访问根节点
总结方法:经过次数法(按照逆时针画边缘线,经过一次访问为先序,两次中序,三次后序)


4.哈夫曼编码:
5.图:数据元素之间是多对多关系(任意关联)。
顶点:数据元素
边:连接顶点
无向图:相邻顶点间没有顺序要求
有向图:与无向图反之
顶点的度:连接的边的数量
无向完全图:两两相连。边数为 n(n-1)/2
有向完全图:两两相连,且每两点间有两条相反方向的边。边数为无向完全图两倍
连通图:任意两点间连通(只要可以到达就是连通),即所有点在一条路上
连通分量:连通图的连通分量只能为自身。非连通图的分量可以多个
强连通图:有向图中,点之间能互相连通(有向)则为强连通图
强连通分量:
权:边的值
网:带权值的图
邻接矩阵:对图的数据存储。无向邻接矩阵是以斜对角线对称的。有向邻接矩阵则不同


6.图的遍历:
深度优先:用邻接矩阵存储,时间复杂度为O(n*n)。邻接表存储,时间复杂度为(n+e)
广度优先:同上     

7.生成树:包含所有节点,并且边只有n-1条。连通图的生成树为极小连通子图。
8.最小生成树:在网中,边有权值
普里姆算法:先确定一个点,再找与现有点相连权最小的点,连起来。(从点找)。时间复杂度为O(n*n)
克鲁斯卡尔算法:把所有点画出来,选出当前两点间权值最小的边,连起来(保证不会形成回路)。直到所有点都有边。时间复杂度为O(eloge)



0 0
原创粉丝点击