数据结构与算法学习
文章平均质量分 75
在这里写一些数据结构和算法的笔记,会包含个人对于一些数据结构还有算法的理解,方便随时学习复习记忆
nameofworld
加油加油^_^
展开
-
数据结构与算法-排序算法4-希尔排序
排序也称为排序算法。排序是将一组数据依据指定的顺序进行排列的过程。希尔排序是希尔于1959年提出的一种排序算法,它也是一种插入排序,是简单那插入排序经过改进之后的一种更高效版本,也称为缩小增量排序。把记录按下标的一定增量分组,(先将其分为数组长度的一半,然后再把一半继续分为一半,依此类推)对每一组使用直接插入排序算法排序,随着增量逐渐变小,每组包含的关键词越来越多,当增量减至1时,整个文件恰好被分为一组,算法便终止。原创 2024-05-19 00:14:36 · 895 阅读 · 1 评论 -
数据结构与算法-排序算法3-插入排序
数组中n个元素,把这n个待排序元素看成一个有序序列和一个无序序列。开始时有序序列中只有一个元素,无序序列中有n-1个元素。排序过程中每次从无序序列中取出第一个元素,把它与有序序列中元素进行比较,将它插入到有序序列中的适当位置。这样有序序列中就多了一个元素,无序序列中就少了一个元素。直到无序序列中没有元素了,整个数组中元素就排好序了。插入排序是将无序序列中元素一个个插入到有序序列中。原创 2024-05-15 00:43:37 · 353 阅读 · 0 评论 -
数据结构与算法-排序算法2-选择排序
排序也称为排序算法。排序是将一组数据依据指定的顺序进行排列的过程。数组中n个元素,从数组第一个元素开始到最后一个元素,第一次从arr[0]到arr[n-1]中选取最小值min1,如果min1不等于arr[0],就将min1与arr[0]交换。接着对右边n-1个元素也这样,第二次找到这n-1个元素中的最小值min2,比较min2与arr[1],如果不相等就交换。依此类推记住:选择排序是从左到右找到位置对应的元素。原创 2024-05-14 18:05:33 · 710 阅读 · 0 评论 -
数据结构与算法-排序算法1-冒泡排序
排序也称为排序算法。排序是将一组数据依据指定的顺序进行排列的过程。内部排序:将需要处理的所有数据都加载到内存中进行排序。外部排序:数据量过大(比如10亿个数据),无法全部加载到内存中,就需要借助外部存储(文件、磁盘等)进行排序。先加载一部分,排序完之后再加载另外一部分进行排序,排序完再合并。数组中n个元素,从数组第一个元素开始到最后一个元素,依次比较相邻元素的值,如果如果左端元素大于右端元素就交换它们的位置,使得较大的元素在右边。这样数组最右端的元素就是数组中的最大元素。原创 2024-05-13 22:13:00 · 1159 阅读 · 0 评论 -
数据结构与算法-时间复杂度
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中语句的执行次数称为语句频度或者时间频度,记为T(n)。举例:一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示(就是前面时间频度的那个T(n))。若有某个辅助函数f(n)使得当n趋于无穷大时T(n)/f(n)的极限值为不等于0的常数,就称f(n)是T(n)的同量级函数,记为T(n)=O(f(n)),O(f(n))为算法的渐进时间复杂度,简称为时间复杂度。原创 2024-05-13 00:53:23 · 608 阅读 · 0 评论 -
数据结构与算法-栈
栈(stack)栈是一个先进后出的有序列表限制线性表中元素的插入和删除只能在线性表的同一端进行。允许插入和删除的一端即变化的一端称为栈顶top,另一端为固定的一端称为栈底bottom。最先放进栈中的元素在栈底,最后放入的元素在栈顶。在删除元素时最先放进的元素最后删除,最后放入的元素最先删除。可以想象,最后放进去的东西在栈最上面,最好拿。最先放进去的东西在栈底,如果栈底的上面还有东西,要拿到栈底的东西就需要先把上面的东西拿开才能拿到栈底的东西,就挺麻烦的,所以最最后拿栈底的东西。原创 2024-05-05 16:09:36 · 776 阅读 · 0 评论 -
数据结构与算法-单向环形链表与约瑟夫问题(续思路与代码)
上一篇写的单向环形链表与约瑟夫问题简介和举例,这篇写思路和代码。先创建一个节点,有个first变量指向这个节点,这个节点的next也是指向自己。还有个curBoy变量。然后新加一个节点,还有个boy变量。根据用户输入,生成出圈顺序。先设置一个辅助变量helper初始时指向环形链表最后一个节点,小孩报数前先让first和helper移动k-1次也就是移到k所在编号节点。当小孩报数时,first和helper同时移动m-1次(总共移动m下,因为到自己要移动一下,所以除自己之外要移动m-1下)原创 2024-05-05 01:36:35 · 1260 阅读 · 0 评论 -
数据结构与算法-单向环形链表与约瑟夫问题
单向环形链表,闭合的形成一个环。单向环形链表的一个应用场景是约瑟夫问题。约瑟夫问题为:设编号为1,2,…,n的n个人围坐一圈,约定编号为k(1原创 2024-05-03 22:46:10 · 334 阅读 · 0 评论 -
数据结构与算法-双向链表
在使用带头节点的单向链表查找时查找的方向只能是一个方向,而双向链表可以向前或向后查找。例如单向链表只能查到一个节点的下一个节点,但是双向链表不仅可以查到下一个节点,还可以查到上一个节点。在删除节点时,单向链表不能自我删除,需要借助辅助节点temp,因为单向链表就能找到下一个节点,把这个节点删了就不能直接找到下一个节点了。而双向链表可以自我删除,反正可以找到前一个节点,也可以找到后一个节点,这个节点自己就可以实现删除自我,让自己上一个节点和下一个节点连起来。原创 2024-05-03 22:08:25 · 935 阅读 · 0 评论 -
数据结构与算法-单链表面试题
在HeroNode类中写一个方法public static int getLength(HeroNode head)获取节点个数。如果是带头节点就不统计头节点。如果head节点的next为null就返回0.否则定义一个length变量用于计数,定义一个辅助变量current,current=head.next,然后循环中只要current不为null就把length加1,再把current后移。循环结束后返回的length就是节点的个数。原创 2024-05-01 23:07:17 · 391 阅读 · 0 评论 -
数据结构与算法-单链表
本文包括单链表的添加删除修改链表(Linked List)链表是有序列表,但在内存中存储情况如下比如这里的头指针是150,我们就找到地址为150的这行,即data域是a1,它的next域是110,那么就指向地址为110的这行,它的data域是a2,next域是180,那么就指向地址为180的这行,data域是a3.以此类推。它的每个节点并不是连续存储的。就是地址不是连续的。原创 2024-05-01 17:49:00 · 833 阅读 · 0 评论 -
数据结构与算法-抽象数据类型ADT系列
以前在学习数据结构的时候做实验,老师要求用来写这些实现代码。不过以前学习的时候使用的编程语言是,里面会用到很多指针。现在编代码过程大多数时候都是用Java。不过思路应该还是可以参考一下的。二叉树:前序、中序、后序遍历。哈夫曼树。图。链表。栈。队列。邻接矩阵。邻接表。原创 2024-04-29 22:22:54 · 380 阅读 · 2 评论 -
数据结构与算法-环形队列
针对简单队列中数组使用一次就不能用,无法复用的问题,将这个数组改成一个环形队列,使得数据取出后这个空间能够再次使用。环形队列常用公式队满: (rear + 1) % maxSize == front队空:rear==front将数据加入队列思路先判断是否队满,没满就QueueArr[rear] = n,因为rear指的是队尾数据的后一个,所以不用先rear+1.然后,赋值之后再将rear指针移位,不过不是直接rear+1,而是(rear+1)%maxSize,环形队列嘛,取模。原创 2024-04-29 20:11:35 · 884 阅读 · 0 评论 -
数据结构-简单队列
队列为一个有序列表,可以用数组或链表来实现。先进先出原则。先存入队列的数据先取出,后存进队列的数据后取出。这里对比一下,栈是后来者居上下面使用数组来模拟队列,用数组的结构来存储队列的数据:Queue中两个指针,front为队首,rear为队尾。maxSize是该队列的最大容量。当有数据加进来时,加到队尾,front没有变化,而rear在增加。当数据被取出,从对头取出,rear没有变化,而front在增加。front随数据输出而改变,rear随数据输入而改变。怎么记呢?原创 2024-04-28 22:44:08 · 986 阅读 · 0 评论 -
数据结构与算法--稀疏数组
当一个数组中大部分元素为0或者为同一个值时,可以用稀疏数组来保存这个数组。记录数组共有几行几列,有多少个不同的值把具有不同值的元素的行列以及元素的值记录在一个小规模的数组中,从而缩小程序的规模简单点说就是稀疏数组只记录有数据的行和列。原创 2024-04-28 00:42:37 · 934 阅读 · 0 评论 -
单链表ADT模板简单应用算法设计:有序单链表的归并+提纯
单链表ADT模板简单应用算法设计:有序单链表的归并+提纯作者: 冯向阳时间限制: 1S章节: DS:线性表截止日期: 2022-06-30 23:55:00问题描述 :目的:使用C++模板设计单链表的抽象数据类型(ADT)。并在此基础上,使用单链表ADT的基本操作,设计并实现单链表的简单算法设计。...原创 2022-07-02 17:02:52 · 286 阅读 · 0 评论 -
单链表ADT模板简单应用算法设计:单链表中前 m 个元素和后 n 个元素的互换
单链表ADT模板简单应用算法设计:单链表中前 m 个元素和后 n 个元素的互换作者: 冯向阳时间限制: 1S章节: DS:线性表截止日期: 2022-06-30 23:55:00问题描述 :目的:使用C++模板设计单链表的抽象数据类型(ADT)。并在此基础上,使用单链表ADT的基本操作,设计并实现单链表的简单算法设计。...原创 2022-07-02 16:59:29 · 213 阅读 · 0 评论 -
顺序表ADT模板简单应用算法设计:线性表的合并
顺序表ADT模板简单应用算法设计:线性表的合并作者: 冯向阳时间限制: 1S章节: DS:线性表截止日期: 2022-06-30 23:55:00问题描述 :目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。应用4:试设计一个算法,将所有在线性表LB中但不在LA中的数据元素插入到LA中,算法执行之后,线性表LB不再存在。...原创 2022-07-02 16:56:16 · 255 阅读 · 0 评论 -
顺序表ADT模板简单应用算法设计:删除顺序表中的冗余元素
顺序表ADT模板简单应用算法设计:删除顺序表中的冗余元素作者: 冯向阳时间限制: 1S章节: DS:线性表截止日期: 2022-06-30 23:55:00问题描述 :目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。应用3:试设计一个算法,删除非空顺序表L中的冗余元素,即使得操作之后的顺序表中只保留操作之前表中所有值都不相同的元素。...原创 2022-07-02 16:51:30 · 72 阅读 · 0 评论 -
顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换
顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换作者: 冯向阳时间限制: 1S章节: DS:线性表截止日期: 2022-06-30 23:55:00问题描述 :目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。应用1:试设计一个算法,用尽可能少的辅助空间将非空顺序表中前 m 个元素和后 n 个元素进行互换,即将线性表(a1,a2,…,am,b1,b2,…,bn) 改变成(b1,b2,…,bn,a1,a2,…,am)。..原创 2022-07-02 16:48:18 · 683 阅读 · 0 评论 -
邻接表:BFS实现拓扑排序
邻接表:BFS实现拓扑排序作者: 冯向阳时间限制: 1S章节: DS:图截止日期: 2022-06-30 23:55:00问题描述 :目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,基于广度优先搜索的思想,对于给定的有向图(网),实现拓扑排序。...原创 2022-07-02 16:44:04 · 394 阅读 · 0 评论 -
邻接表:添加一个顶点
邻接表:添加一个顶点作者: 冯向阳时间限制: 1S章节: DS:图截止日期: 2022-06-30 23:55:00问题描述 :目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,向已存在的图中添加一个顶点。图的存储结构采用邻接表。添加的顶点的位序在顶点集。原创 2022-07-02 16:34:11 · 694 阅读 · 0 评论 -
邻接矩阵:有向无权图的判定
邻接矩阵:有向无环图(DAG)的判断作者:冯向阳时间限制:1S章节:DS:图这道题像是前面构造邻接矩阵和前一道题 邻接表:BFS实现拓扑排序 的结合版,只需要在上一道题基础上Graph结构体里面加上一个用来存邻接矩阵的二维数组,然后输出时把输出邻接表改成输出输出邻接矩阵,然后在TopoSort函数里把原来输出拓扑排序的句子去掉就可以了。AC代码...原创 2022-07-02 16:27:03 · 1000 阅读 · 0 评论 -
邻接矩阵 构造无权图
25 邻接矩阵:构造无权图原创 2022-06-22 18:50:39 · 173 阅读 · 0 评论 -
二叉树:销毁
目的:使用C++模板设计并逐步完善二叉树的抽象数据类型(ADT)。内容:(1)请参照链表的ADT模板,设计二叉树并逐步完善的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。(2)基本操作6:在二叉树的二叉链表存储形式建立的基础上,设计二叉树的销毁算法,原创 2022-05-14 23:12:07 · 2324 阅读 · 0 评论 -
二叉树:前序、中序、后序遍历
二叉树:前序、中序、后序遍历。在二叉树的二叉链表存储形式建立的基础上,设计二叉树的三种遍历算法:前序、中序和后序。完成后将它们加入到二叉树的ADT基本操作集中。使用C++模板设计并逐步完善二叉树的抽象数据类型(ADT)。先序(中序、后序)遍历T,对每个结点调用函数visit一次且仅一次。一旦visit()失败,则操作失败。原创 2022-05-11 21:20:59 · 318 阅读 · 0 评论 -
二叉树:层次遍历
目的:使用C++模板设计并逐步完善二叉树的抽象数据类型(ADT)。内容:(1)请参照链表的ADT模板,设计二叉树并逐步完善的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。(2)基本操作5:在二叉树的二叉链表存储形式建立的基础上,设计二叉树的层次遍历算原创 2022-05-11 21:34:29 · 540 阅读 · 0 评论 -
线性结构与非线性结构简介
线性结构中除了第一个元素和最后一个数据元素之外,其它数据元素是首尾相接。(可能偶然情况下会连续),每个数据相当于一个节点,节点中存放数据元素以及相邻元素的地址信息,通过指针连起来,这样就方便利用零散的内存(这里放一块,那里放一块,元素之间离散存储,反正可以找到它相邻的节点,通过指针彼此相连)。也就是,各个数据元素不再保持在一个线性序列中,每个元素可能与零个或多个其它数据元素发生联系。·集合中存在唯一的“第一个元素”和“最后一个元素”。·除了最后一个元素之外,其它数据元素都有唯一后继。,链式存储的线性表是。原创 2024-04-27 17:34:20 · 409 阅读 · 0 评论 -
数据结构与算法开篇
的学科,有了编程语言也就有了数据结构。学好数据结构可以编写出更加漂亮更加有效率的代码。3.在实际应用中,选择和设计合适的数据结构和算法是。,高效的程序需要在数据结构的基础上设计和选择算法。1.数据data结构structure是一门。要想学好算法,就要把数据结构学到位。2.要学好数据结构就要多多考虑如何。,而算法的设计依赖于合适的数据结构。优化程序性能和解决问题的关键。静态的描述数据元素之间的关系。数据结构为算法提供基础。解决问题的步骤和方法。原创 2024-04-27 16:34:06 · 224 阅读 · 0 评论