数据结构(王卓)
文章平均质量分 72
主要侧重于其中的代码实现部分
宇 -Yu
所有内容均为原创!如果是搬运或者是转载的内容会有标记或者注明引用的出处!
展开
-
数据结构与算法基础(王卓)(38):排序、全部PPT、笔记整理
回头我把链接贴出来,感兴趣的朋友可以Mark一下,希望可以帮助到大家。对了,后续应该会把王卓老师所有的PPT附带笔记全部打包上传百度云。还有,大家免费上传,CSDN你还想收钱,未免太不够意思了。首先,庆祝本系列完结撒花!原创 2023-05-10 16:51:27 · 2218 阅读 · 5 评论 -
数据结构与算法基础(王卓)(37):选择排序(简单选择、堆排序)
我们甚至还提出了问题:他这里是怎么找到最后一个元素的?程序开始时他已经默认完前面从图1到图2的过程操作已经给我们提前安排操作好了。PPT实际上写的其实是步骤二(图2)到步骤四(图4)这个整个过程的算法。在一开始(最开始),我们看这个程序,那是根本完全看不懂,艹。而不是tmd从图1开始的整个过程的算法。原创 2023-05-10 16:07:35 · 935 阅读 · 0 评论 -
数据结构与算法基础(王卓)(36):交换排序之快排【第三阶段:深挖解决问题】精华!精华!精华!!!重要的事情说三遍
而这里,如果我们写程序还是跟着/像上一节那样,每次都简单的只是采用 if / else 判断语句。从程序开头开始,直到【第一个元素让出来的空格】装入【第一个小于哨兵的元素】然后再通过小于哨兵的元素的前面一个元素通过(+1)的方式找到该元素进行操作。这段过程,整个过程的所有操作的程序,全部重新自己一步一步手写一遍。更准确的来说,这里我们这个所谓的“监视”,指的是是重新手写一遍。我们【第一个元素让出来的空格】装入【第一个小于哨兵的元素】如果前/后面的空格还没补上,我们就开始移动前/后面的指针。原创 2023-05-09 15:47:28 · 525 阅读 · 0 评论 -
数据结构与算法基础(王卓)(35):交换排序之快排【第二阶段:标准答案、初步发现问题】
OK,本来我也觉得不以为然,乍一看没什么大问题了,只剩下一个无伤大雅的。其实只能对整张表的第一个元素进行操作,未免有些不太灵活。结果到整的去尝试了一下带入实例了以后发现。没错,他说的也有道理,我上面写的操作,原创 2023-05-08 20:47:06 · 446 阅读 · 0 评论 -
数据结构与算法基础(王卓)(35):交换排序之快排【第一阶段:第一遍遍历】
实际上,因为我们对程序执行的流程不清晰,导致了我们的思维混乱。其实只能对整张表的第一个元素进行操作,未免有些不太灵活。通过看视频操作我们发现,我们这里写的程序存在一定的。在这里,我们对程序的更改未免有点矫枉过正了。详细思路不再赘述,可以去看王卓老师视频。没错,他说的也有道理,我上面写的操作,原创 2023-05-05 20:17:35 · 450 阅读 · 0 评论 -
数据结构与算法基础(王卓)(34):交换排序之冒泡排序
目录前置条件:冒泡排序:(在我们【前面排序的顺序表】的前置条件的要求之下,后面不再赘述)第一步:第一次/遍遍历,先确定最后的/最大的一个元素第二步:注意:另外,如果还要温习回顾一下之前我们是怎么学这个玩意的,可以看看:第三步:思路:方法:实现:冒泡排序:(在我们【前面排序的顺序表】的前置条件的要求之下,后面不再赘述)第一步:第一次/遍遍历,先确定最后的/最大的一个元素写(第)一次冒泡排序的程序默认数据位置从位序为1的位置开始存储,0的位置空出来,用来存储哨兵/作为暂存空间 So.原创 2023-05-05 10:48:35 · 628 阅读 · 0 评论 -
数据结构与算法基础(王卓)(33):折半插入排序、希尔排序
目录折半插入排序 Project 1:问题:缺少在插入元素之前的移动元素的操作Project 2:(最终成品、结果)希尔排序 Project 1:(个人思路)标准答案:(PPT答案)解释说明:(在程序实际执行的时候的算法运行逻辑顺序实际上和王卓老师网课中所讲的有所不同)(1):赋值阶段(2):第一轮【第一次】比较 (3):第二轮到第(d)轮【第一次】比较(4):第一轮到第(d)轮【第2次及其后续的】比较重点来了:至于如何调整先后进行比较时,不同的间隔大小d的问题,这里标准答案给出的方法是:王道答案:本土化直原创 2023-05-01 21:36:55 · 1010 阅读 · 3 评论 -
数据结构与算法基础(王卓)(32):直接插入排序思路复盘梳理、个人版本最终答案
原因和前面标准答案为什么使用【j + 1】类似(相同)这里不再赘述。原创 2023-04-26 19:35:08 · 624 阅读 · 0 评论 -
数据结构与算法基础(王卓)(31):直接插入排序代码
但是无法用 j 来执行:把所有 j 及 j 之后有序序列的元素全部往后移动一位。甚至无法执行利用 j 来找到 j 前/后的元素位置。然后紧接着,我们又去参考了标准答案:(看了视频)设定 i , j 为int 型。我们可以用 j 来比较哨兵。原创 2023-04-24 20:35:44 · 692 阅读 · 0 评论 -
数据结构与算法基础(王卓)(30):排序概述(分类)、直接插入排序思路
(因为要插入的新元素已经放在哨兵里面了,我们不用担心后退一位会不会有数据丢失的影响)外存排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,比较复杂。若大于等于:(哨兵元素大于等于指针 j 指向的元素)不比较元素大小,仅根据元素本身的取值确定其有序位置。若小于:(哨兵元素小于指针 j 指向的元素)能使任何数值相等的元素,排序后相对次序不变。数值相等的元素,排序后相对次序变化。单处理机(同一时刻比较一对元素)输入数据越有序,排序的速度越快。输入数据越有序,排序的速度越慢。注意:不要忘了(i++)!原创 2023-04-22 20:42:18 · 429 阅读 · 0 评论 -
数据结构与算法基础(王卓)(29):二叉排序树
【代码】数据结构与算法基础(王卓)(27):二叉排序树。原创 2023-04-14 21:17:06 · 222 阅读 · 0 评论 -
数据结构与算法基础(王卓)(27)线性表的查找(1):顺序查找(线性查找)
看这就不用去翻PPT了查找:根据给定的某个值,在查找表中确定一个与其关键字等于给定值的数据元素(或记录)原创 2023-04-13 21:37:19 · 1302 阅读 · 0 评论 -
数据结构与算法基础(王卓)(28)线性表的查找(2):顺序查找(二分查找、分块查找)
前置条件和前面一样最开始根据PPT示(实)例写出的程序框架:一开始:low:第一位high:最后一位mid:正中间查找数小于mid:把high移动到mid前面一位( - 1)再取新mid = 新【正中间】查找数大于mid:把low移动到mid后面一位( + 1)再取新mid = 新【正中间】然而这里,我写的只是一些框架的核心规则,并。原创 2023-04-13 21:36:39 · 1471 阅读 · 0 评论 -
数据结构与算法基础(王卓)(26):深度优先遍历算法DFS和广度优先遍历算法BFS
我们写的函数:在一开始指向的,并不是第 i 个顶点,而是第一个顶点的第 i 个元素。在最后的判断语句最好还是新设立一个指针变量,要不然后面我感觉p容易变混乱了。更何况我们第一步要输出的,是一个顶点,而非一个边结点。不过也无所谓了,这玩意不是很重要,而且总归是能写的。哈哈哈扯淡的,后面其实根本不需要这个玩意。这里,我们犯(陷入)了许多个逻辑错误。我感觉这个写的就是逐个访问输出。原创 2023-04-10 20:53:33 · 674 阅读 · 0 评论 -
数据结构与算法基础(王卓)(26)附:邻接表的广度优先遍历算法BFS(学习过程记录)
在过程中碰到的问题主要大概就是以上这些了,因为学习过程中我没有把每次的程序修改都去打版修改,只能根据过程列出来这些坑,可能还有其他的,但是这些坑应该是已经踩得够多了,,所以感觉这里写的有点乱啊,TMD这里面这样随着感觉些感觉还是很混乱,还是要。这里面不能用递归,因为用递归他就不断的开始重复新建队列,他这样就搞没完了。不管元素之前有没有没输出访问过,我们每次循环寻找下一位的操作都是不变的。而重要的是:只要这个节点不为空,我们就永远指向下一位。同样的,输出的次数应该是和出队的次数保持一致的。原创 2023-04-10 20:44:19 · 581 阅读 · 0 评论 -
数据结构与算法基础(王卓)(25):用邻接表表示图
/图的结构定义struct ALG//顶点表//顶点数和边数汇总->原创 2023-04-07 20:40:57 · 1654 阅读 · 2 评论 -
数据结构与算法基础(王卓)(24):关于图的创建与解构剖析(用邻接矩阵表示图)
【代码】数据结构与算法基础(王卓)(22):关于图的创建与解构剖析。原创 2023-04-05 16:44:42 · 525 阅读 · 0 评论 -
数据结构与算法基础(王卓)(23):哈夫曼编码(2):结果
最后后面在老师的网课的评论区里面,看到一个Github上面用栈实现该算法的实例,但是只有函数体,而且变量设置的有点奇怪。网课不应定就是对的,就是最好的,最后还不是要靠栈来实现。所以说啊兄弟们,还是要拥有自己独立思考的能力。原创 2023-04-03 15:28:35 · 450 阅读 · 0 评论 -
数据结构与算法基础(王卓)(23):哈夫曼编码(1):过程
给HC开辟相应的,每个节点对应需要的存储空间大小的空间每算完一个节点的哈夫曼编码就把它放(复制)到HC里面释放空间,结束这里,我们可以按标准答案:使用 strcpy函数(虽然实际上我也没听说过),最终再用delete释放空间当然这个过程中还是碰到了一些。原创 2023-04-03 15:02:44 · 619 阅读 · 0 评论 -
数据结构与算法基础(王卓)(22):哈夫曼树
(2):必须要新设定一个新的变量 i 来记录后续遍历的整个过程而不能直接通字母n吗?该问题来源自: int m = 2 * n - 1;(3):同样的,这里的连续赋值影响最终结果吗?(1):我们新的元素应该从(n+1)开始。原创 2023-04-02 11:22:17 · 793 阅读 · 2 评论 -
数据结构与算法基础(王卓)(21):树的存储结构及其不同表示方法、树和森林跟二叉树的转换
【代码】数据结构与算法基础(王卓)(19):树的存储结构。原创 2023-03-29 20:42:49 · 88 阅读 · 0 评论 -
数据结构与算法基础(王卓)(20):二叉遍历思想的应用(二叉树的建立(DLR先序遍历,递归算法)、二叉树的复制、求二叉树的深度、求二叉树的结点数、求二叉树的叶子结点数)及线索二叉树
分解成一个个的单结点二叉树(叶子结点)问题的累加(用递归函数一层层分解二叉树)左子树 = 根结点+左子树+右子树......如此循环反复。思想:嵌套思想,第一性原理(拆解简化实现完成不可能的功能)不是形参实参和指针都能表示返回传递吗。程序再返回到前面开始写这个嵌套(套娃)的语句之后。二叉树 = 根结点+左子树+右子树;右子树 = 根结点+左子树+右子树。调用没有执行完就又套用了一层调用。里面套的下一层调用执行完毕了以后。把一个复杂二叉树的运算求解问题。原创 2023-03-24 16:46:49 · 107 阅读 · 0 评论 -
数据结构与算法基础(王卓)(19):遍历二叉树算法的实现
/根据需求情况修改//binary:二进制的;二元的;由两部分组成的;struct BiNode//二叉链表存储结构struct//左右孩子指针struct TriNode//trinary:三元的structint main()原创 2023-03-22 21:43:52 · 818 阅读 · 0 评论 -
数据结构与算法基础(王卓)(17):KMP算法详解(精讲(最简单、直接、有效的思路方法,答案以及代码原理)
本文具体思路参考: (最后证明,该教材/网课实际上是最有效的)中间走的一些弯路的教材:课本走弯路过程,详见。原创 2023-03-13 11:39:46 · 676 阅读 · 1 评论 -
数据结构与算法基础(王卓)(18):KMP算法详解(代码实现及细节、问题)
实现代码的过程中。原创 2023-03-11 16:38:46 · 784 阅读 · 1 评论 -
数据结构与算法基础(王卓)(16):KMP算法(个人学习历程)
如果只是想快速了解上手KMP,可以直接看:书上的内容(经过简化和解释说明后的版本):其实就是说:子串里面的第j个字符,这个字符他前面的k个字符刚好和子串最前面(开头)的k个字符一模一样将其图像化可能更加直观:这种属性落实到具体提高比较效率上,重点就是:当出现了前缀和后缀以后我们可以把(子串)前缀移动到后缀的位置,主串不变,进行下一轮比较换句话说,就是在(到)下一轮比较时直接把前缀移动到(移动)之前后缀所处的位置,跳过这中间所有的字符直接进行这个位置开始的,后面的比较按理说,这里接下来我们就可以进行顺理成章地原创 2023-03-13 14:53:41 · 470 阅读 · 1 评论 -
数据结构与算法基础(王卓)(15):KMP算法(速成套路,不含代码)
PPT:P30 书上的内容(经过简化和解释说明后的版本):其实就是说:子串里面的第j个字符,这个字符他前面的k个字符刚好和子串最前面(开头)的k个字符一模一样将其图像化可能更加直观:这种属性落实到具体提高比较效率上,重点就是:当出现了前缀和后缀以后我们可以把(子串)前缀移动到后缀的位置,主串不变,进行下一轮比较换句话说,就是在(到)下一轮比较时直接把前缀移动到(移动)之前后缀所处的位置,跳过这中间所有的字符直接进行这个位置开始的,后面的比较按理说,这里接下来我们就可以进行顺理成章地归纳关于next [ i原创 2023-03-11 15:41:10 · 422 阅读 · 0 评论 -
数据结构与算法基础(王卓)(14):串、数组和广义表(BP、KMP算法)
而是: while (i原创 2023-03-08 10:57:17 · 430 阅读 · 0 评论 -
数据结构与算法基础(王卓)(13):小结:关于队列和栈的定义及其基础操作
【代码】数据结构与算法基础(王卓)(13):小结:关于队列和栈的定义及其基础操作。原创 2023-03-03 17:29:13 · 102 阅读 · 0 评论 -
数据结构与算法基础(王卓)(12):队列的定义及其基础操作(解决假上溢的方法,循环队列解决队满时判断方法,链队和循环队列的初始化等)
循环队列:解决假上溢的方法:引入循环队列(判断是否溢出)循环队列解决队满时判断方法:少用一个元素空间前置条件:初始化:求长度:取队头元素:入队和出队:链式队列:前置条件:初始化销毁入队:出队:求链队列的队头元素:原创 2023-03-03 17:17:37 · 1489 阅读 · 0 评论 -
数据结构与算法基础(王卓)(11):栈的定义及其基础操作(顺序和链式的初始化、求长度,是否为空,清空和销毁、出栈、压栈),栈与递归
stack:一堆,一摞;堆;垛;数据结构与算法基础(王卓)(7):小结:关于链表和线性表的定义及操作_宇 -Yu的博客-CSDN博客(这里写的是线性表的构造形式,也可以写成链表的构造形式)初始化:简单操作:(求长度,是否为空,清空和销毁)在这里,我们很容易产生这样的疑问:关于清空和销毁,我们不是应该把元素一个一个置为NULL吗???这里销毁和清空改变的只是指向这个位置的指针的值,可是没有把位置的内容置空(null)啊??实际原因解释如下:这里我们其实只是让(将)栈回归到(置于)原创 2023-02-20 20:42:09 · 978 阅读 · 0 评论 -
数据结构与算法基础(王卓)(10):案例分析与实现(多项式;稀疏多项式;图书管理系统(略);)
题干:用线性表和链表的方式,分别实现(稀疏)多项式的。原创 2023-02-15 11:37:00 · 451 阅读 · 0 评论 -
数据结构与算法基础(王卓)(9):线性表的应用(有序表合并)(有序,可重复)
一个语句实现最后,关于模块三:其实我们不用在去设置看A和B哪个表更长的判断语句因为其实我们即使直接写两个循环语句,依然不影响程序的运行。原创 2023-01-20 14:15:20 · 2713 阅读 · 0 评论 -
数据结构与算法基础(王卓)(8)附:关于new的使用方法详解
分配:指定类型的,大小为1的,内存空间;2: new( )分配:指定类型的,大小为1的,内存空间;用括号中的值初始化变量3:new[]分配:指定类型的,大小为(方框内数字)n的,内存空间用方框中的数字n:初始化空间的大小(数组元素个数)内存形式为数组附:part1定义多维数组变量或数组对象,产生一个指向数组首个元素的指针返回的类型:保持 除最左边维数外的 所有维数 但是我们在这里需要特别提醒(注意):在这里我们无论是上原创 2023-01-09 22:54:12 · 2214 阅读 · 0 评论 -
数据结构与算法基础(王卓)(8):线性表的应用(并集:无需有序,不能重复)
【代码】数据结构与算法基础(王卓)(8):线性表的应用。原创 2023-01-15 17:17:21 · 724 阅读 · 0 评论 -
数据结构与算法基础(王卓)(7):小结:关于链表和线性表的定义及操作
初始化单链表链表是否为空销毁单链表清空链表求表长取第i个元素查找元素位序插入元素删除元素头插法尾插法以上//链表的定义及其基础操作#include//存放exit#define MAXlength 100 //初始大小为100,可按需修改{float p;int e;};{};//函数调用状态struct K{float a;int b;string c;}};//函数调用状态。原创 2022-12-30 13:46:39 · 234 阅读 · 0 评论 -
数据结构与算法基础(王卓)(6):带尾指针(单向)循环链表的合并;双链表及其插入和删除的详细操作
Ta和Tb是两表本身的名称,只是两表都采用尾指针而已,不存在什么指向表B的说法。当我们试图去简化程序,看看能不能不用temp,结果发现:(根本不可能实现)临时变量temp应该指向的,是尾结点指向的地址,而不是尾结点本身的地址;两表合并以后不应存在原B表的头结点(理论上说,应该删除)我们要做的,即:。原创 2022-12-27 15:30:28 · 1502 阅读 · 0 评论 -
数据结构与算法基础(王卓)(5):关于(单)链表较复杂的操作
(单)链表的一些较为复杂的操作:默认前置:取第i个元素project 1:(自己写的,凑合着也能用)project 2:根据课程上写的(算法复杂度低一些,比较好用)按值查找(查找其地址,以及是表中第几个元素(位置序号))project 1: 但是要注意,如果要这么写的话,在类型K的声明里,还需要加上手撸判断表达式的定义: project 2:根据课程上写的(算法复杂度低一些,比较好用)同理:插入(把元素e插到第i个位置结点上) project 1:原创 2022-12-04 21:27:47 · 673 阅读 · 0 评论 -
数据结构与算法基础(王卓)(4):关于(单)链表的一般操作(初始化<结构整理>;检查是否为空;链表的销毁与清空;求表长)
位置:第二章:PPT:115;关于链表我们设立的默认前置条件:注意:语句:typedef K Elemtype; 必须放在struct K定义之后,程序才能正常运行,否则(如果放在其之前): 虽然这个报错乱七八糟的我也不知道他在搞什么鸡毛从这里我们也可以看出,如果每次在设计链表之前都需要进行如此冗长的前置条件,那未免过于麻烦为了和我们之前学习C++一样(正常一点),我们对默认前置条件进行如下改动:然后对链表开始定义如下基础操作: 检查是否为空关于链表的销毁与清空,详见:原创 2022-12-03 20:38:50 · 282 阅读 · 0 评论 -
数据结构(王卓)(4)附:链表的销毁与清空
另外,如果我们在输入的时候,输入一个链表Lnode类型进去:或者:清空(只销毁内容)project 1:(其实只是对销毁链表的生搬硬套的照抄,并且里面还缺少了while语句的循环)project 2:结果他说清空链表是指清空中间的所有结点,但是保留头结点(也包括头指针)(为空)而不是清空链表中每一结点存储的数据内容,remake:project 3:整个程序运行的流程逻辑链路还是没有完成闭环project 4: 注意:在这里,我们不能再用L来指向第二个节点的地址,因为原创 2022-12-03 17:31:33 · 3936 阅读 · 1 评论