从零开始学习数据结构
从零开始学习数据结构
理木客
欢迎关注同名公众号:理木客
展开
-
学习数据结构--第七章:排序
第七章:排序1.排序的基本概念排序 重新排列表中的元素,使表中的元素满足按关键字递增或递减排序算法的稳定性 若待排序表中有两个元素Ri和Rj,其对应的关键字ki=kj,且在排序前Ri在Rj前面,若使用某排序算法后,Ri仍然在Rj前面。则称这个排序算法是稳定的,否则称排序算法不稳定。注意:算法的稳定性是算法的性质,并不能衡量一个算法的优劣内部排序 指在排序期间元素全部存放在内存中的排序内部排序:插入排序(直接插入排序、折半插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(简单原创 2020-08-30 17:18:21 · 1564 阅读 · 0 评论 -
学习数据结构--第六章:查找(查找)
第六章:查找1.查找的基本概念查找:在数据集合中寻找满足某种条件的数据元素的过程。查找的结果 查找成功和查找失败查找表:用于查找的数据集合,由同一种数据类型(或记录)的组成,可以是一个数组或链表等数据类型操作查询某个特定的数据元素是否在查找表中检索满足条件的某个特定的数据元素的各种属性在查找表中插入一个数据元素从查找表中删除一个数据元素如果只有前连个操作的查找表称为:静态查找表,有上面四个操作的称为:动态查找表关键字:数据元素中唯一标识该元素的某个数据项的值,使用基于关键字原创 2020-07-02 18:51:59 · 3294 阅读 · 0 评论 -
学习数据结构--第五章:图(图的应用)
第五章:图(图的应用)1.最小生成树生成树:连通图包含全部顶点的一个极小连通子图这里需要注意的是是一个极小连通子图上面第一个是一个连通图,右侧两个图实它的生成树,他们包含了全部顶点且是极小连通子图,如果我们把图2中A和D链接起来他就不是一个生成树了,因为他不是极小的,如果我们把图3中的C和D中的边去掉,他也不是生成树了,因为他不是连通的。如上图,我们把图的边加上权值他就叫做网,我们找出它的两个上生成树,其中图2的所有边的权值的和为:2+2+5+6=15,图3的所有边的权值之和是:1+2+4原创 2020-06-23 22:03:29 · 1490 阅读 · 0 评论 -
学习数据结构--第五章:图(图的遍历操作)
第五章:图(图的遍历操作)1.图的遍历图的遍历:从图中某一顶点除法,按照某种搜索方法沿着图中的边对图中的所有顶点访问依次且仅访问一次其实树的层次遍历和图的广度优先搜索类似,可以把这个二叉树看成一个图2.广度优先搜索(BFS)**广度优先搜索 **首先访问起始顶点v接着由v出发依次访问v的各个 未被访问过 的邻接顶点w1,w1…wi然后依次访问w1,w2…wi的所有 未被访问过 的邻接顶点在从这些访问过的顶点出发,访问它们所有 未被访问过 的邻接顶点以此类推如上图,它的 广度优先原创 2020-06-17 20:05:29 · 1522 阅读 · 0 评论 -
学习数据结构--第五章:图(图的基本操作)
第五章:图(图的基本操作)1.Adjacent(G,x,y)Adjacent(G,x,y) 判断图G是否存在边<x,y>或(x,y)如上 无向图 的邻接矩阵和邻接表表示方法,判断方法分别为:邻接矩阵:判断该边是否存在直接判断对应邻接矩阵中的值即可,如果是1存在否则不存在邻接表:判断对应顶点的边表是否存在这样一条边的边表结点因为无向图的邻接矩阵和邻接表我们会存储两遍,所以无论第一个结点x做行号,还是y做行号都可以进行查找如上 有向图 的邻接矩阵和邻接表表示方法,判断方法分原创 2020-06-16 19:02:22 · 3108 阅读 · 1 评论 -
学习数据结构--第五章:图(图的存储方法)
第五章:图(图的存储及基本操作)1.邻接矩阵法下面时一个无向图的表示,我们使用一个一维数组存放点集,使用一个二维数组存放边集二维数组表示边:行号表示其实端点,列号表示结束端点,值表示该边是否存在,以及该边的权重,我们称这种二维数组表示的矩阵为邻接矩阵邻接矩阵法:结点数位n的图G=(V,E)的邻接矩阵A是n*n的(每个行号表示一个结点每个列号表示一个结点,n个结点即为n*n)将G的顶点编号为 V1,V2,V3…Vn (1,2,3…数组下标)若<Vi,Vj> 存在,则A[i][j]原创 2020-06-15 18:43:58 · 706 阅读 · 1 评论 -
学习数据结构--第五章:图(图的基本知识)
第五章:图(图的基本知识)1.图的基本概念图 图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合|V| 表示图G中顶点的个数,也称图G的阶;|E|表示图G中边的条数(| |代表绝对值)注意:线性表、树都可以为空,但是图不能为空2.无向图&有向图上面我们讲解的图,就是一个无向图,它的边集使用的圆括号组成的一个集合,为什么使用的圆括号?其实这样的圆括号表示的就是无向边。无向边:表示这个边是没有方向的,它并原创 2020-06-07 16:02:45 · 1889 阅读 · 0 评论 -
学习数据结构--第四章:树与二叉树(二叉排序树、二叉平衡树、哈夫曼树)
第四章:树与二叉树(树与二叉树的应用)原创 2020-06-03 19:14:43 · 1956 阅读 · 1 评论 -
学习数据结构--第四章:树与二叉树(树和森林的相关知识)
第四章:树与二叉树(树和森林的相关知识)1.存储方式1.1双亲表示法双亲表示法:采用一组连续的存储空间来存储每个结点,同时在每个节点中增设一个伪指针,指示双亲结点在数组中的位置。根结点的下标为0,其伪指针域为-1代码实现://每一个结点,数据 data 和标识双亲结点的下标的 parent#define MAX_TREE_SIZE 100typedef struct{ ElemType data; int parent;}PTNode;//二叉树结构体typedef st原创 2020-06-01 20:09:18 · 939 阅读 · 0 评论 -
学习数据结构--第四章:树与二叉树(二叉树的遍历和线索二叉树)
第四章:树与二叉树(二叉树的遍历和线索二叉树)上篇文章中讲了 学习数据结构–第四章:树与二叉树(二叉树的顺序存储和链式存储) 下面讲二叉树的遍历和线索二叉树1.二叉树的遍历二叉树的遍历:按某条搜索路径访问树中的每个结点,树的每个结点均被访问一次,而且只访问一次。我们按照访问根结点的顺序分为先序遍历:先根->左子树->右子树中序遍历:先左子树->根->右子树后序遍历:先左子树->右子树->根注意无论根什么时候访问,都是先访问左子树后访问右子树。1原创 2020-05-31 20:22:13 · 243 阅读 · 0 评论 -
学习数据结构--第四章:树与二叉树(二叉树的顺序存储和链式存储)
第四章:树与二叉树(二叉树的存储结构)1.二叉树的顺序存储二叉树的顺序存储用一组连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素。思考为啥是存储完全二叉树?这里正常情况存储的时数据,我们这里理解就存储编号了。但是如果使用上图存储,我们如何表示二叉树的逻辑关系呢?二叉树的逻辑关系:1 是 2 和 3的双亲结点,2 3 是 1 的孩子结点。这样的逻辑关机该如何维护呢?我们在学习线性表的时候,我们知道线性表的地址是连续的,也就是线性表的下一个结点就是它下一个存储单元存放的元素,但是原创 2020-05-27 19:33:59 · 901 阅读 · 0 评论 -
学习数据结构--第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)
第四章:树与二叉树(二叉树的逻辑结构)1.二叉树二叉树是树结构的一种,故二叉树也是逻辑结构。二叉树:二叉树是n(n≥0)个结点的有限集合。1)n=0时,二叉树为空;2)n>0时,由根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树也分别是一棵二叉树。五种基本形态三个结点的二叉树有多少种??2.二叉树VS度为2的有序树1)二叉树可以为空,而度为2的有序树至少有三个结点度为2的有序树,则说明必须有一个结点的子节点为两个2)二叉树的孩子结点始终有左右之原创 2020-05-26 14:29:54 · 389 阅读 · 0 评论 -
学习数据结构--第四章:树与二叉树(树的基本概念、基本术语、性质)
第四章:树与二叉树(树的基本概念)1.树的基本概念首先树是一种逻辑结构。**树:**是n(n≥0)个结点的有限集合,n=0时,称为空树。而任意非空树应满足:1)有且仅有一个特定的称为根的结点2)当n>1时,其余结点可分为m(m>0个互不相交的有限集合,其中每一个集合本身又是一棵树,称为根结点的子树。特点: 除根结点外每一个结点都有一个一个前驱结点。每一个结点都有零个或多个后继结点。n个结点的树只有n-1条边。2.基本术语2.1树的结点2.2树的度度: 树中一个结点的原创 2020-05-25 22:47:18 · 351 阅读 · 0 评论 -
学习数据结构--第三章:栈和队列(特殊矩阵的压缩存储)
特殊矩阵的压缩存储1.矩阵在C语言中,我们通常使用二维数组来存储矩阵。2.矩阵的压缩存储比如我们要将下面的学生信息通过一个3行6列的矩阵存储起来,但是所有的学生的信息都是一样的,所以我们其实只用存储一个就行了。下面的信息,每一行信息都是一样的,按照上述压缩方式我们只需三个存储单元就可以存放该矩阵的所有信息了。压缩存储:指多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。特殊矩原创 2020-05-24 17:50:33 · 715 阅读 · 0 评论 -
学习数据结构--第三章:栈和队列(栈的应用、括号匹配、中后前缀表达式转换)
第三章:栈和队列1.栈的应用1.1括号匹配我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ) 来表示运算的优先级,我们把这样的[ ] 和 ( ) 提取出来组成的序列叫做括号匹配序列。匹配序列( [ ( ) ] )[ ] [ ] ( )( ) [ ( ) ]上面是正确的可以匹配的序列,每一个( 或者[都有与之对应的)或者]。不匹配序列( [ ( ) ]] [ ] ( )( ] [ ( ) ]下面是一个正确匹配的序列,我们给每一个标上号,一次输入原创 2020-05-21 21:18:06 · 520 阅读 · 0 评论 -
学习数据结构--第三章:栈和队列(顺序队列的基本操作、循环队列)
第三章:栈和队列上篇文章中我们讲了 学习数据结构–第三章:栈和队列(栈的基本操作) 下面讲解队列的基本操作。1.队列的基本概念队列(Queue) 只允许在表的 一端(队尾) 进行插入,表的 另一端(对头) 进行删除操作的 线性表。在队列中先进入队列的元素会先出队列即:先进先出 (FIFO)2.队列的基本操作InitQueue(&Q) 初始化队列,构造一个空队列QQueueEmpty(Q) 判队列空,若队列Q为空返回true,否则返回 falseEnQueue(&Q,x原创 2020-05-20 22:21:06 · 1798 阅读 · 0 评论 -
学习数据结构--第三章:栈和队列(栈的基本操作)
第三章:栈和队列1.栈的基本概念栈(Stack) 只允许在 一端 (这一端叫做栈顶) 进行插入或者删除操作的 线性表在栈中先进入栈的元素会后出栈即:先进后出 (LIFO)2.栈的基本操作InitStack(&s) 初始化一个空栈SStackEmpty(S) 判断一个栈是否为空,若栈为空则返回true,否则返回 falsePush(&S,x) 进栈,若栈S未满,则将加入使之成为新栈顶。Pop(&S,&x) 出栈,若栈非空,则弹出栈顶元素,并用x返回。GetT原创 2020-05-19 19:52:49 · 728 阅读 · 0 评论 -
学习数据结构--第二章:线性表(顺序表VS链表)
第二章:线性表(顺序表VS链表)在 学习数据结构–第二章:线性表(顺序存储、插入、删除) 和 学习数据结构–第二章:线性表(链式存储、单链表、双链表、循环链表) 这两篇文章中分别讲了顺序表和链表的存储特点以及基本的操作,下面讲解顺序表和链表的一些区别和在解决实际问题的时候我们应该做出怎样的选择,以及线性表的常用操作。1.顺序表和链表的差异性在单链表中每一个数据的存储不一定是连续的,所以我们无法实现随机存取,只能通过指针连接各个结点,所以我们只能实现顺序存取。而在顺序表中每一个数据源的存放是连续的原创 2020-05-17 23:04:36 · 1056 阅读 · 0 评论 -
学习数据结构--第二章:线性表(链式存储、单链表、双链表、循环链表)
第二章:线性表(链式表示)学习数据结构–第二章:线性表(顺序存储、插入、删除) 这篇文章讲到线性表的顺序表示也就是顺序表,顺序表虽然可以随机存储,但是在初始化的时候需要申请一大块连续的存储空间,且在执行插入和删除操作时,也需要大量的移动元素,时间复杂度比较高,下面讲线性表的另一种存储结构:链式存储1.单链表的定义线性表的链式存储又称:单链表 ,通过一组任意的存储单元来存储线性表中的数据元素。数据元素存储在任意位置,不一定连续,通过指针实现线性逻辑关系。我们把单链表中这样 数据加地址的组合 叫做原创 2020-05-16 20:37:37 · 699 阅读 · 1 评论 -
学习数据结构--第二章:线性表(顺序存储、插入、删除)
第二章:线性表1.线性表的定义和基本操作线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列线性表中第一个元素称为表头元素;最后一个元素称为表尾元素。除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继。2.线性表的顺序存储结构线性表的顺序存储是用一组地址连续的存储单元(比如C语言里面的数组),依次存储线性表中的数据元素。顺序存储的线性表也叫顺序表。地址连续:存储器每个存储单元都有编号,这个编号就是地址Loc(a2)=Loc(a1)+d原创 2020-05-15 18:17:56 · 2410 阅读 · 0 评论 -
学习数据结构--第一章:绪论
第一章:绪论1.基本概念以及术语:数据:信息的载体,是 描述客观事物 属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的 符号的集合数据对象:具有相同性质的数据元素的集合,是数据的个子集数据元素: 数据的基本单位 ,通常作为个整体进行考虑和处理数据项:构成数据元素的不可分割的 最小单位数据包含数据对象,数据元素构成数据对象。所有人的身份信息就可以作为数据对象,每一个人的身份信息就可以作为数据元素,身份信息的姓名、编号就可以作为数据项。1.1数据数据类型(集合+操作)原创 2020-05-14 20:43:46 · 348 阅读 · 1 评论