
数据结构
Roam-G
for the ability
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构...原创 2022-05-09 23:57:16 · 968 阅读 · 0 评论 -
可以用缩格(或移行)的文本形式(Indented Text)来表示一棵树的结点数据。例如,下面图(a)所示的树的缩格文本形式如图(b)所示。试设计一个算法,将用左子女-右兄弟链表表示的树用缩格文本形
可以用缩格(或移行)的文本形式(Indented Text)来表示一棵树的结点数据。例如,下面图(a)所示的树的缩格文本形式如图(b)所示。试设计一个算法,将用左子女-右兄弟链表表示的树用缩格文本形式输出。【解答】下面给出树的左子女-右兄弟表示的类声明。template <class Type> class Tree;template <class Type> classTreeNode { //树的结点类friend class<...原创 2021-12-08 20:44:24 · 309 阅读 · 0 评论 -
一棵树的存储结构可以采用双亲表示法,即父指针数组表示法。试给出相应的类定义。其中,每个树结点包含两个成员:数据域data和双亲指针parent;树则有一个树结点数组NodeList[MaxSize]
一棵树的存储结构可以采用双亲表示法,即父指针数组表示法。试给出相应的类定义。其中,每个树结点包含两个成员:数据域data和双亲指针parent;树则有一个树结点数组NodeList[MaxSize],MaxSize表示该数组的最大结点个数,size是当前结点个数,current指示最近操作结点位置,即当前指针。【解答】下面给出用双亲(父指针)表示的树和树结点类定义。template <class Type> class Tree;template <class Ty..原创 2021-12-06 22:16:43 · 861 阅读 · 0 评论 -
C++线索二叉树的相关操作
C++线索二叉树的相关操作#pragma once//5.21 --212--线索二叉树的类定义template<class T>struct ThreadNode{ int ltag, rtag; ThreadNode<T>* leftChild, * righChild; T data; ThreadNode(const T item) :data(item), leftChild(nullptr), righChild(nullptr), ...原创 2021-12-06 21:00:40 · 697 阅读 · 0 评论 -
设一棵二叉树以二叉链表表示,试以成员函数形式编写有关二叉树的递归算法:
设一棵二叉树以二叉链表表示,试以成员函数形式编写有关二叉树的递归算法:原创 2021-12-05 22:41:44 · 2730 阅读 · 0 评论 -
设二叉树采用二叉链表表示,指针root指向根结点,试编写一个在二叉树中查找值为x的结点,并打印该结点所有祖先结点的算法。在此算法中,假设值为x的结点不多于一个。
设二叉树采用二叉链表表示,指针root指向根结点,试编写一个在二叉树中查找值为x的结点,并打印该结点所有祖先结点的算法。在此算法中,假设值为x的结点不多于一个。【解答】此算法采用后序的非递归遍历形式。因退栈时需要区分其左、右子树是否已经遍历,故在结点进栈时附带有一个标志,=0,进入左子树,=1,进入右子树。用栈S1保存结点指针ptr,用栈S2保存标志tag。这两个栈的进栈与退栈是同步的。#include<iostream.h>#include“st...原创 2021-12-04 20:48:02 · 2682 阅读 · 0 评论 -
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。【解答】思路: 从i=0开始,首先创建 根结点,并把T[0]的值赋给该结点。然后递归建立根的左子女,取值为 T[2*i+1].再递归建立根的右子女,取值为 T[2*i+2]template <class Type> //建立二叉树istream& operator>> ( istrea...原创 2021-12-03 22:21:04 · 920 阅读 · 3 评论 -
假设一棵树的存储结构采用双亲表示法,双亲指针数组为int parent[MaxSize],其中MaxSize表示双亲指针数组的最大结点个数。树中各个结点按先根遍历次序存放,根结点存于parent[0]
.假设一棵树的存储结构采用双亲表示法,双亲指针数组为int parent[MaxSize],其中MaxSize表示双亲指针数组的最大结点个数。树中各个结点按先根遍历次序存放,根结点存于parent[0]。试编写一个函数,计算p所指结点和q所指结点的最近公共祖先结点。【解答】这是一个二重循环。外层循环从结点 p向双亲方向循环,每变动一个结点,即对从结点 q到根的路径上各结点进行检测,遇到外层循环当前标定的结点即终止。此结点即为所求。int CommonAncestry .原创 2021-12-03 21:55:42 · 954 阅读 · 0 评论 -
数据结构:竞标赛排序 原理简单
数据结构:竞标赛排序 原理简单代码不会写,太复杂了原创 2021-11-28 16:36:56 · 122 阅读 · 0 评论 -
AVL二叉平衡树-旋转 构建 数据结构
AVL二叉平衡树-旋转 构建 数据结构 --总结原创 2021-11-24 22:00:50 · 127 阅读 · 0 评论 -
编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。
编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。若设这n个自然数存放在整数数组A[n]中,A[i]中存放整数i+1(0≤i≤n-1)。为求从这n个自然数中任取r个数的组合,可采用递归方法 comb(A,n,r)。例如当n=5,r=3时,首先确定第一个数,如5,再从比它小的剩余的n一1个数中取r一1个数的组合comb(A,n—1,r一1),即可得到以5开始.原创 2021-11-21 23:19:28 · 2290 阅读 · 0 评论 -
C++ 二叉搜索树的 删除算法
//二叉搜索树的 删除算法//在以ptr为根结点的 二叉搜索树中删除x结点。若成功 则新根通过ptr返回。template<class E, class K>bool BST<E, K>::Remove(const K x, BSTNode<E, K>*& ptr) { BSTNode<E, K>* temp; if (prt != nullptrptr) { if (x < ptr->data) Re...原创 2021-11-14 23:01:15 · 1032 阅读 · 0 评论 -
编写一个递归算法,输出自然数1,2,…,n这n个元素的全排列
编写一个递归算法,输出自然数1,2,…,n这n个元素的全排列。#include<iostream>using namespace std;void perm(int A[], int i, int n) { int j, temp; static int k = 0; if (i == 0) { k++; cout <<"全排列,第"<< k << "种: "; for (j = 0;j < n;j...原创 2021-11-12 14:48:58 · 1653 阅读 · 0 评论 -
真TMD是无语死了,一本书中各种错误,这是哪里来的K
真TMD是无语死了,一本书中各种错误,这是哪里来的K,只给代码不给注释解析就是耍流氓,还总是出错,对得起清华大学吗??????真是吐了,辣鸡书。原创 2021-11-12 14:16:30 · 243 阅读 · 0 评论 -
八皇后问题 算法解析
(八皇后问题)设在初始状态下在国际象棋棋盘上没有任何棋子(皇后)。然后顺序在第1行,第2行,……第8行上布放棋子。在每一行中有8个可选择位置,但在任一时刻,棋盘的合法布局都必须满足3个限制条件,即任何两个棋子不得放在棋盘上的同一行,或者同一列、或者同一斜线上。试编写一个递归算法,求解并输出此问题的所有合法布局。(提示:用回溯法。在第n行第j列安放一个棋子时,需要记录在行方向,列方向、正斜线方向,反斜线方向的安放状态,若当前布局合法,可向下一行递归求解,否则可移走这个棋子,恢复安放该棋子前的状态,试探本行..原创 2021-11-12 12:09:18 · 375 阅读 · 0 评论 -
斐波那契数列三种方法计算,光棍节快乐
//斐波那契数列三种方法计算//Fibnacci(0)=0//Fibnacci(1)=1//Fibnacci(n)=Fibnacci(n-1)+Fibnacci(n-2) [n>1]//1.递归计算//斐波那契数列三种方法计算//Fibnacci(0)=0//Fibnacci(1)=1//Fibnacci(n)=Fibnacci(n-1)+Fibnacci(n-2) [n>1]//1.递归计算long Fibnacci(long n) { if (n &l...原创 2021-11-11 20:16:30 · 698 阅读 · 0 评论 -
并查集检查是否有环
#include<iostream>#include<math.h>#define VERTICES 6using namespace std;void initialise(int parent[]) { int i; for (i = 0;i < VERTICES;i++) { parent[i] = -1; }}int find_root(int x, int parent[]) { int x_ro...原创 2021-11-06 22:07:21 · 197 阅读 · 0 评论 -
如何利用拓扑排序將一个有向无环图的邻接短阵中的非零元素集中到对角线以上?
如何利用拓扑排序將一个有向无环图的邻接短阵中的非零元素集中到对角线以上?如何利用拓扑排序將一个有向无环图的邻接短阵中的非零元素集中到对角线以上?如何利用拓扑排序將一个有向无环图的邻接短阵中的非零元素集中到对角线以上?如何利用拓扑排序將一个有向无环图的邻接短阵中的非零元素集中到对角线以上?...原创 2021-11-03 20:47:29 · 161 阅读 · 0 评论 -
关节点、重连通图
右图是一个连通图,请画出(1) 以顶点①为根的深度优先生成树;(2) 如果有关节点,请找出所有的关节点。(3) 如果想把该连通图变成重连通图,至少在图中加几条边?如何加?【解答】(1) 以顶点①为根的深度优先生成树:(2)关节点为①,②,③,⑦,⑧(3)至少加四条边 (1, 10), (3, 4), (4, 5), (5, 6)。从③的子孙结点⑩到③的祖先结点①引一条边,从②的子孙结点④...原创 2021-11-03 18:50:16 · 1045 阅读 · 3 评论 -
图的十字链表存储结构
前面介绍了图的邻接表存储法,本节继续讲解图的另一种链式存储结构——十字链表法。与邻接表不同,十字链表法仅适用于存储有向图和有向网。不仅如此,十字链表法还改善了邻接表计算图中顶点入度的问题。十字链表存储有向图(网)的方式与邻接表有一些相同,都以图(网)中各顶点为首元节点建立多条链表,同时为了便于管理,还将所有链表的首元节点存储到同一数组(或链表)中。其中,建立个各个链表中用于存储顶点的首元节点结构如图 1 所示:图 1 十字链表中首元节点结构示意图从图 1 可以看出,首元节点...原创 2021-11-03 18:15:56 · 567 阅读 · 0 评论 -
图的顺序存储结构(包含C语言实现)
使用图结构表示的数据元素之间虽然具有“多对多”的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图。使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点之间的关系(二维数组)。存储图中各顶点本身数据,使用一维数组就足够了;存储顶点之间的关系时,要记录每个顶点和其它所有顶点之间的关系,所以需要使用二维数组。不同类型的图,存储的方式略有不同,根据图有无权,可以将图划分为两大类:图和网。图,包括无向图和有向图;网,是指带权的图...原创 2021-11-03 18:13:49 · 853 阅读 · 0 评论 -
什么是连通图,(强)连通图详解
前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是V1-V2-V3和V1-V4-V3,因此称 V1 和 V3 之间是连通的。图 1 顶点之间的连通状态示意图无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。例如,图 2 中的无向图就是一个连通图,因为此图中任意两顶点之间都是连通的。图 2 连通图示意图若无向图不是连通图...原创 2021-11-03 18:11:39 · 7708 阅读 · 0 评论 -
数据结构的图存储结构
我们知道,数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用线性表和树结构存储,本节学习存储具有"多对多"逻辑关系数据的结构——图存储结构。图 1 图存储结构示意图图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看出数据之间具有的"多对多"关系。例如,V1 与 V4 和 V2 建立着联系,V4 与 V1 和 V3 建立着联系,以此类推。与链表不同,图中存储的各个数据元素被称为顶点(而不是节点)。拿图 1 来说,该图中原创 2021-11-03 18:10:15 · 345 阅读 · 0 评论 -
构造huffman树的算法
#include<iostream>#include"heap.h"using namespace std;//5.43--242--huffman树的类定义const int DefaultSize = 20;template<class T,class E>struct HuffmanNode{ E data; HuffmanNode<T, E>* leftChild, * rightChild, * parent; Huffma...原创 2021-11-01 12:31:01 · 282 阅读 · 0 评论 -
C++ 二叉树
#define NULL 0#define Max(x1, x2) (x1 > x2 ? x1 : x2)#include <iostream.h>template <class Type>class BinaryTree;template <class Type>class BinTreeNode{ friend class BinaryTree<Type>;p...原创 2021-10-24 22:49:19 · 128 阅读 · 1 评论 -
利用顺序表的操作,实现以下的函数。
(1) 从顺序表中删除具有最小值的元素并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。(2) 从顺序表中删除第i个元素并由函数返回被删元素的值。如果i不合理或顺序表为空则显示出错信息并退出运行。(3) 向顺序表中第i个位置插入一个新的元素x。如果i不合理则显示出错信息并退出运行。(4) 从顺序表中删除具有给定值x的所有元素。(5) 从顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素,如果s或t不合理或顺序表为空则显示出错信息并退出运行原创 2021-10-21 20:23:30 · 1543 阅读 · 1 评论