
数据结构
jingling1007
永远不要停下学习的脚步
展开
-
数据结构|二叉链表后序遍历算法
分析:二叉树后序遍历序列的第一个结点是左子树中最左下的结点,如果左下的结点无左子树但有右子树,那么就是右子树中最左下的结点。假设二叉树采用二叉链存储结构存储,要求返回二叉树b的后序序列中的第一个结点的指针。设计一个算法,采用后序遍历方式求一颗给定二叉树b中的所有小于x的结点个数。原创 2023-04-18 19:31:02 · 765 阅读 · 0 评论 -
数据结构|二叉链表的先序遍历算法(编程题)
分析:该题可以使用先序遍历,从根结点开始找,然后min可以设置为结点个数n,p设置为当前的层次,然后在每次递归时,如果找到没有左子树和右子树的叶子结点x,则将该层次p赋给min,直到找到编号最小的叶子结点(也就是离根节点最近的叶子结点)设计一个算法,利用结点的右孩子指针rchild将一颗二叉树的叶子结点按从左往右的顺序串成一个单链表。假设二叉树采用二叉链存储结构进行存储,设计一个算法,采用先序遍历方法求二叉树b的宽度(即具有结点数最多的那一层上的结点总数)设计一个算法,求二叉树b中第k层上的叶子结点个数。原创 2023-04-18 19:07:45 · 1101 阅读 · 0 评论 -
数据结构|二叉树的顺序存储结构算法1
已知一棵二叉树按顺序方式存储在数组a[1...n]中,设计一个算法,求编号分别是i和j的两个结点的最近公共祖先结点的值。已知一棵含有n个结点的二叉树,按顺序方式存储,设计用先序遍历二叉树中结点的递归和非递归算法。分析:如果要找i和j的一起的祖先结点,可以一直往下找分支结点,直到i和j相等。原创 2023-04-17 19:43:15 · 647 阅读 · 0 评论 -
数据结构|求二叉树中单分支节点的个数
分析:这里可以采用递归的方法来查找,每查找成功一次就+1。设计一个算法求其中单分支的结点个数。原创 2023-04-17 10:30:09 · 3311 阅读 · 0 评论 -
数据结构|将两个递增的单链表合并成一个递减的单链表
分析:这题其实合并很简单,但是如何将递增变成递减是关键,这里可以通过头插法来实现,第一次找到小于另一个单链表的结点插入,因为后续的每个结点都会比第一次插入的结点要大,所以这样就可以把值大的元素通过头插法变成前面的。单链表hc,要求算法空间复杂度为O(1)。设计一个尽可能高效的算法,将两个。单链表ha、hb合并为一个。原创 2023-04-17 10:27:28 · 1668 阅读 · 0 评论 -
数据结构|将两个循环单链表合并成一个单链表
题目:设ha={a1,a2,a3,...,an},hb={b1,b2,b3,...,bm}是两个带头结点的循环单链表,设计一个算法将这两个表合并成一个带头结点的循环单链表hc。分析:先找到ha的尾结点p,将结点p的next指向hb的首结点,再找到hb的尾结点p,将其构成循环单链。原创 2023-04-13 19:47:20 · 1673 阅读 · 2 评论 -
数据结构|找单链表的中间位置的元素
题目:一个线性表(a1,a2,a3....,an)(n>3)采用带头结点的单链表L存储,设计一个算法求中间位置的元素(n为奇数时对应n/2的元素,n为偶数时对应(n+1)/2的元素)分析:让p,q首先指向首结点,然后在p结点后面还存在两个结点的时候循环,p后移两个元素,q后移一个结点。当循环结束后,q指向的就是中间位置的结点。原创 2023-04-13 17:22:28 · 699 阅读 · 0 评论 -
数据结构|单链表的逆置(详解)将后一个直接指向前一个
这个采用了直接把后一个指向前一个的思想。原创 2023-04-12 18:57:52 · 236 阅读 · 0 评论 -
数据结构|单链表的逆置(详解)头插法
后续循环也是以此类推。原创 2023-04-12 17:24:50 · 874 阅读 · 0 评论 -
数据结构|快速排序实现
设有一组初始记录关键字序列(K1,K2,…,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。原创 2023-04-09 13:29:00 · 110 阅读 · 0 评论 -
数据结构|在无序序列中查找数组中第k小的元素(采用快速排序法)
假设二叉树b采用二叉链存储结构,设计一个算法void findparent(BTNode *b,ElemType x,BTNode *&p)求指定值为。的结点的双亲结点p。提示,根结点的双亲为NULL,若在二叉树b中未找到值为。个整数的无序数据序列,所有的数据元素均不相同,采用整数数组。-1]存储,请设计一个尽可能高效的算法,输出该序列中第。的结点,p亦为NULL。原创 2023-04-09 10:59:53 · 953 阅读 · 0 评论 -
数据结构|输出二叉排序树采用中序线索链表作为存储结构进行存储后中所有值在a,b之间的关键字
假设二叉排序树采用中序线索链表作为存储结构进行存储,请写出该线索链表的存储结构,并编写算法输出该二叉排序树中所有值在a,b之间的关键字,其中a < b,二叉排序树左子树结点的值小于根结点的值,右子树结点的值大于根结点的值,树中没有关键字相重的结点。原创 2023-04-08 20:25:29 · 260 阅读 · 1 评论 -
数据结构|将链表中小于0的数全部放在大于0的数的前面
该题可以使用while循环先找到第一个小于0的数(其实这一步也可以不要,因为后面那个while也可以做到,不过这里为了方便理解,所以就加上了),然后再使用while循环将该小于0的结点在原位置删除,将其插入到头结点后面(其实这里就有点像单链表的头插法),然后指针指回pre的next,进行比较,大于0就跳过,往后查找,小于0就按上面的规则进行删除,然后使用头插法插入头结点后面,直到所有结点都处理完毕。设计一个尽可能高效的算法,将所有小于零的结点移到所有大于等于零的结点的前面。结点的所有子孙结点值。原创 2023-04-06 15:44:25 · 1196 阅读 · 4 评论 -
数据结构|求单链表A和B的并集
题2:假设二叉树采用二叉链存储结构进行存储,假设每个节点值为单个字符且所有节点值不同,设计一个算法,输出二叉树。题1:用单链表来存储集合,并假设这样的单链表中的节点递增有序,设计一个尽可能高效的算法求两个集合。由于单链表是递增有序的,可以采用归并算法提高求并集的效率,结果并集C采用尾插法建表。的所有节点值,并分析你所设计算法的时间复杂度。个元素,分析你设计的算法的时间和空间复杂度。原创 2023-04-05 17:37:41 · 1265 阅读 · 0 评论 -
数据结构|求两个链表的交集,查找链表的双亲结点
假设二叉树b采用二叉链存储结构,设计一个算法void findparent(BTNode *b,ElemType x,BTNode *&p)求指定值为x的结点的双亲结点p,提示,根结点的双亲为NULL,若未找到这样的结点,p亦为NULL。设计一个尽可能高效的算法求A和B的交集,要求不破坏A、B的结点,将交集存放在单链表C中。题1:设A和B是两个结点个数分别为m和n的单链表(带头结点),其中元素递增有序。),空间复杂度为O(MIN(算法的时间复杂度为O(原创 2023-04-05 16:23:26 · 552 阅读 · 0 评论 -
数据结构|从顺序表中删除重复的元素
解:对于顺序表L,用i从1开始遍历其元素,设L.data[0..j](j的初值为0)中没有重复的元素。检测L.data[i](j原创 2023-04-04 20:41:46 · 1500 阅读 · 0 评论 -
数据结构|判断B是否为A的一个子序列
题目:设A=(a1,a2,…,an),B=(b1,b2,…,bm)是两个递增有序的线性表(其中n、m均大于1),且所有数据元素均不相同。假设A、B均采用带头节点的单链表存放,设计一个尽可能高效的算法判断B是否为A的一个子序列,并分析算法的时间复杂度和空间复杂度。采用二路归并思路,用p、q分别扫描有序单链表A、B,先找到第一个两者值相等的节点,然后在两者值相等时同步后移,如果B扫描完毕返回1,否则返回0。原创 2023-04-03 11:13:55 · 1175 阅读 · 0 评论 -
数据结构|AOE网活动的最早、最迟发生时间及关键路径问题
从后往前,后继结点的最迟发生时间-边权值,取最小值MIN。最早发生时间和最迟发生时间相同的结点即为关键路径上的节点。,这条路径称为关键路径。关键路径上的活动称作关键活动。从前往后,前驱结点到当前结点所需时间,取最大值MAX。:等于当前边指向结点的最迟发生时间-当前边的权值。(1)求事件的最早开始时间ve和最迟开始时间vl;整个活动的完成时间是AOE图中从始点到终点的。:等于当前边起始结点的最早发生时间。:等于当前边指向结点的最早发生时间。:等于当前边指向结点的最迟发生时间。(2)求出关键路径;原创 2023-03-29 13:06:18 · 12224 阅读 · 0 评论 -
数据结构|单链表的建立,查找,插入,删除
查找值为x,返回该元素的逻辑序号。查找第i位元素,返回该元素的值。建立单链表(带头节点)原创 2023-01-13 15:23:26 · 511 阅读 · 3 评论 -
数据结构|设计一个算法,将顺序表的所有奇数移动到偶数的前面
法2:可以从两端开始扫描,如果左边扫描的元素为奇数,则跳过,如果右边扫描的元素为偶数,则跳过,直到左边找到偶数,右边找到奇数,让这两个数交换。法1:可以从头扫描顺序表的元素,当扫描到该元素为奇数,让k++,奇数区间+1(k初始值为-1),然后让该元素与L->data[i]交换。设计一个算法,将顺序表的所有奇数移动到偶数的前面。原创 2023-01-13 11:23:51 · 3813 阅读 · 1 评论 -
数据结构|以第一个元素为分界线(基准),将所有小于等于它的元素移到该基准的前面,将大于它的移到该基准的后面
可以从顺序表的两端开始扫描,左边扫描到小于等于基准则跳过不移动,大于基准的则与当前右边下标为j的交换,右边扫描到大于基准则跳过不移动,小于等于基准的则与当前左边下标为i的交换。有一个顺序表L,假设元素类型ElemType为整型,以第一个元素为分界线(基准),将所有小于等于它的元素移到该基准的前面,将大于它的移到该基准的后面。以下用了两种方法来做这题,这两种方法的时间复杂度都是O(n),空间复杂度是O(1),但使用方法二会更好,因为第2个算法中移动元素的次数更少。原创 2023-01-13 10:41:51 · 1677 阅读 · 8 评论 -
数据结构|顺序表的应用:删除其中所有值等于x的元素,要求算法的时间复杂度为O(n),空间复杂度为0(1)
其实方法一和方法二的思路是类似的,推荐大家用方法2,代码简洁。原创 2023-01-12 22:17:02 · 1342 阅读 · 0 评论 -
数据结构|顺序表的初始化,插入,删除,查找
删除顺序表中元素值为e的元素,并返回该元素的下标(0,1,2,3,4.....)删除顺序表中第i个位置的元素(1,2,3,4....),并返回该元素的值。在顺序表中查找值为e的元素的下标(0,1,2,3.....)在L前面一定要加&,要不然无法在外面引用建立好的顺序表。在顺序表第i位插入元素e(1,2,3,4....)以下代码是用c++实现的顺序表的各种基本运算。销毁顺序表,求顺序表的长度。原创 2023-01-12 18:54:03 · 969 阅读 · 0 评论