数据结构
数据结构与算法
Mitch311
我与春风皆过客, 你携秋水揽星河。
展开
-
【C++】置换选择排序(模拟)
题目:编程实现置换选择排序给定一组关键码序列,请模拟置换选择排序得到多个有序子序列。例如,关键码序列为(50、49、35、45、30、25、15、60、27),欲对其进行从小到大进行排序。假设内存中最多可以容纳3个记录(即堆的大小最大为3),则经过置换选择排序可得到2个子序列,分别为 (35, 45, 49, 50)、(15, 25, 27, 30, 60)。输入样例:50 49 35 45 30 25 15 60 27(待排序关键码序列)3(内存大小)输出样例:...原创 2021-06-08 19:39:45 · 1752 阅读 · 0 评论 -
【C++】不同轴值下的快速排序代码测试
//author:Mitchell//date:5.25#include<iostream>#include<windows.h>using namespace std;template <class T>void swap(T Array[], int x, int y) { int z = Array[x]; Array[x] = Array[y]; Array[y] = z;}#define THRESHOLD 28templa...原创 2021-06-01 13:56:23 · 932 阅读 · 0 评论 -
【C++】堆排序(基于最小堆的直接选择排序)
//author:Mitchell_Donovan//date:5.25#include<iostream>using namespace std;template<class T>class MinHeap {private: T* heapArray;//存放堆数据的数组 int currentSize;//当前堆中的元素个数 int maxSize;//堆的大小 //交换位置x和位置y的元素 void swap(int x, int y) { ...原创 2021-05-25 16:21:12 · 362 阅读 · 0 评论 -
【C++】测试不同的增量序列下shell排序的时间开销
题目:编程实现shell排序算法。尝试采用不同的增量序列,测试shell排序的时间开销。输入可以为正序、逆序或随机序列。初始化正序数组:int record[MAXSIZE];memset(record, 0, MAXSIZE * sizeof(int));for (int i = 0; i < MAXSIZE; i++) { record[i] = i;}初始化逆序数组:int record[MAXSIZE];memset(re...原创 2021-05-25 15:00:30 · 940 阅读 · 2 评论 -
【C++】Kruskal算法解决MST(最小生成树)问题
代码示例????//author:Mitchell_Donovan//date:5.11#include<iostream>#include<queue>#include<iomanip>//用于保留两位小数输出using namespace std;//边类class Edge {public: int from, to; double weight; Edge() { from = -1; to = -1; weight =原创 2021-05-19 18:34:58 · 583 阅读 · 1 评论 -
【C++】Prime算法解决MST(最小生成树)问题
代码示例????//author:Mitchell_Donovan//date:5.11#include<iostream>#include<queue>#include<iomanip>//用于保留两位小数输出using namespace std;//边类class Edge {public: int from, to; double weight; Edge() { from = -1; to = -1; weight =原创 2021-05-19 17:06:07 · 896 阅读 · 1 评论 -
【C++】Floyd算法解决最短路径问题
最短路径问题问题描述:平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短距离。输入:第1行为整数n,表示图中顶点的个数。第2行到第n+1行(共n行),每行两个整数x和y,描述了一个点的坐标(以一个空格分隔)。第n+2行为一个整数m,表示图中连线的个数。此后的m行,每行描述一条连线,由两个整数i和j.原创 2021-05-19 16:53:25 · 1194 阅读 · 0 评论 -
【C++】Dijkstra算法解决最短路径问题
最短路径问题问题描述:平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短距离。输入:第1行为整数n,表示图中顶点的个数。第2行到第n+1行(共n行),每行两个整数x和y,描述了一个点的坐标(以一个空格分隔)。第n+2行为一个整数m,表示图中连线的个数。此后的m行,每行描述一条连线,由两个整数i和j.原创 2021-05-18 14:27:07 · 1555 阅读 · 1 评论 -
【C++】确定比赛名次问题(图的拓扑排序+单调队列)
问题描述:有N个比赛队伍(1<=N<=500),编号依次为1,2,3,⋯⋯, N,进行比赛。比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即如果P1赢P2, 用P1 P2表示,排名时P1在P2之前。现在请你编程序确定排名。输入:输入有若干组,每组中的第一行为二个数N和M其中,N表示队伍的个数,且1<=N<=500,M表示接着有M行的输入数据。接下来的M行数据中,每行包含两个整数P1和P2, 表.原创 2021-05-11 14:54:12 · 2179 阅读 · 0 评论 -
【C++】哈夫曼编码求完全二叉树叶结点编号
题目:哈夫曼编码求完全二叉树叶结点编号有一棵完全二叉树,包含n 个节点。将其叶子节点自左向右从0开始编号。现有一个小球,从根节点出发向下移动,其移动轨迹可以用0-1串表示,其中0表示从当前节点移动到其左孩子,1表示从当前节点移动到其右孩子。当给出小球的移动轨迹,请计算小球到达叶子节点的编号。如图2所示,该完全二叉树包含11个节点。当小球移动轨迹为001时,到达叶子节点的编号为1;移动轨迹为10时,到达叶子节点的编号为4;移动轨迹为01时,小球未到达叶子节点;移动轨迹为101时,小球超原创 2021-04-27 20:26:02 · 1286 阅读 · 0 评论 -
【C++】计算并集分割成的子区间的样本密度平均值
题目:计算并集分割成的子区间的样本密度平均值有两组样本数据非均匀分布在区间[0,1] 内。区间存在两组分界点, 和 。每组分界点个数为(K-1) ,这(K-1)个分界点将整个区间分割成K个子区间。已知每一组分界点的位置和由这组分界点分割成的K 个子区间的样本密度,请计算由这两组分界点的并集分割成的子区间的样本密度的平均值。如图1所示,区间[0,1] 存在两组分界点{0.25,0.5,0.75} 和{0.125,0.25,0.5} 。由第一组样本点划分出的4个子区间样本密度分别为2、1、0.5、05,由第原创 2021-04-27 19:44:48 · 471 阅读 · 0 评论 -
【C++】已知二叉树先序遍历+中序遍历 求后序遍历
题目:已知二叉树先序遍历+中序遍历 求后序遍历对于一棵二叉树,给定其先序遍历的结果序列和中序遍历的结果序列,请写出其后序遍历的结果序列。输入样例:GDAFEMHZ(先序遍历的结果序列)ADEFGHMZ(中序遍历的结果序列)输出样例:AEFDHZMG(后序遍历的结果序列)思路分析????因为前序遍历的首个元素即为根节点,且在中序遍历中根节点前的元素位于左子树,根节点后的元素位于右子树。 利用这一性质,可以把问题看成一个递归问题 递归过程是从前序遍历结果中找到中序遍历原创 2021-04-27 16:33:11 · 2879 阅读 · 1 评论 -
【C++】密度不均的区间划分问题
题目:密度不均的区间划分问题现有区间[0,1] ,区间内存在(K-1) 个分界点s11,s21,…,sK-11 。这(K-1) 个分界点将整个区间分割成K 个等长的子区间,即对于任意的1≤k≤K ,满足sk1-sk-11=1K ,其中s01=0,sK1=1 。有一组样本不均匀地分布在区间[0,1] 内。给定每个子区间内样本密度,请重新确定(K-1) 个分界点,使得由这(K-1) 个分界点确定的K 个新的子区间内样本数量相同。例如,如图1所示,区间[0,1]内存在3个等距的分界点0.25、0.5和0.75原创 2021-04-27 16:21:39 · 799 阅读 · 0 评论 -
【C++】森林的先根/后根遍历+计算叶结点+计算高度
实现森林先根(已提供)、后根遍历递归算法; 计算森林的叶子节点个数(递归算法); 计算森林的高度(递归算法);代码示例????//author:Mitchell_Donovan//date:4.20#include<iostream>using namespace std;template<class T>class TreeNode { template<class T> friend class Tree;private: T data原创 2021-04-20 12:54:51 · 2194 阅读 · 0 评论 -
【C++】堆的构建/插入/删除
代码在上一次堆的构建问题的基础上进行了优化,完善了其他功能????#include<iostream>using namespace std;template<class T>class MinHeap {private: T* heapArray;//存放堆数据的数组 int currentSize;//当前堆中的元素个数 int maxSize;//堆的大小 //交换位置x和位置y的元素 void swap(int x, int y) { T pas原创 2021-04-13 14:56:23 · 758 阅读 · 0 评论 -
【C++】堆的构建
题目:堆的构建给定关键码集合,用筛选法构建小顶堆,并按照层序遍历方式输出构建的堆中所有节点。输入样例:19 8 35 65 40 3 7 45输出样例:3 8 7 45 40 35 19 65代码示例????#include<iostream>using namespace std;template<class T>class MinHeap {private...原创 2021-04-13 13:59:43 · 1724 阅读 · 0 评论 -
【C++】二叉树代码汇总(构建+遍历+求深度+求结点数)
题目示例????实现二叉树前序、中序、后序遍历的递归算法; 计算二叉树的深度(递归和非递归算法); 统计二叉树度为1的节点个数(递归和非递归算法);代码示例????#include<iostream>#include<queue>using namespace std;//结点类template<class T>class BinaryTreeNode { //友元类声明 template<class T> friend cl原创 2021-04-06 18:43:39 · 1244 阅读 · 0 评论 -
【C++】统计二叉树度为1的节点个数(递归+非递归)
首先我们要在结点类里加一个bool类型的函数用于判断该结点度是否为1???? //判断结点度是否为1 bool isAlone() { if (leftchild == NULL && rightchild != NULL) { return true; } else if(leftchild != NULL && rightchild == NULL){ return true; } else { return false;原创 2021-04-06 18:38:09 · 6725 阅读 · 1 评论 -
【C++】计算二叉树的深度(递归+非递归)
相较于非递归,递归算法更加简洁实用???? //递归算法求二叉树深度 int CaculateTreeDepth1(BinaryTreeNode<T>* treeNode) { if (treeNode == NULL){ return 0; } int depth = 0; int leftDepth = CaculateTreeDepth1(treeNode->getLeft());//求左子树的深度 int rightDepth = Cacula原创 2021-04-06 17:53:49 · 3741 阅读 · 0 评论 -
【C++】二叉树递归遍历(前序+中序+后序)
前序遍历????void PreOrder(BinaryTreeNode<T>* treeNode) { if (treeNode != NULL) { treeNode->VisitNode(); PreOrder(treeNode->getLeft()); PreOrder(treeNode->getRight()); } }中序遍历????void InOrder(BinaryTreeNode<T>* treeNod原创 2021-04-06 16:42:16 · 582 阅读 · 0 评论 -
【C++】二叉树基本结构+前序构建
话不多说,直接上代码????#include<iostream>using namespace std;template<class T>class BinaryTreeNode { template<class T> friend class BinaryTree;//友元类private: T data; BinaryTreeNode<T>* leftchild; BinaryTreeNode<T>* rightchi原创 2021-04-06 16:32:18 · 416 阅读 · 0 评论 -
【C++】KMP算法代码实现
题目:使用栈实现后缀表达式计算要求:使用栈实现后缀表达式计算,其中,在后缀表达式中,输入的数字为整数,且为正数,数字、符号之间用逗号隔开,整个后缀表达式用“#”表示结束。输入样例:11 2 3 + *#输出样例:55...原创 2021-03-29 19:43:38 · 1868 阅读 · 0 评论 -
【C++】TicTacToe(井字棋)小游戏
关于TicTacToe介绍话不多说上源码!头文件????#pragma once#include<iostream>using namespace std;class TicTacToe {private: char currentPlayer; char** board;public: TicTacToe();//构造函数 void print();//打印棋盘状态 char getCurrentPlayer();//返回当前玩家 bool isDone()原创 2021-03-29 19:37:20 · 1109 阅读 · 2 评论 -
【C++】单调栈求最大矩形面积
选做题(单调栈的应用):给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。 图 1柱状图示例图1是柱状图的示例,给定的高度为,所能勾勒出来的矩形如图2所示,这些矩形最大面积为10(对应从左数第3个矩形)。 图 2所能勾勒出来的矩形样例输入:21...原创 2021-03-23 12:58:27 · 1156 阅读 · 0 评论 -
【C++】单调队列求特定区间最大值
题目(单调队列的应用):用一个长度为k的窗口在长度为n的整数数列上从左往右滑动,每次滑动一个单位,求出每次滑动后每个窗口里面所包含的数的最大值。例如:当数列为[1, 3, -1, -3, 5, 3, 6, 7],窗口大小k=3,可以得出, 窗口位置 窗口内最大值 [13-1]-35367 3 1[3-1-3]536...原创 2021-03-22 21:40:39 · 1801 阅读 · 0 评论 -
【C++】顺序栈实现后缀表达式计算
按照《数据结构与算法(张铭编著)》课本要求敲的????#include<iostream>using namespace std;class stack{private: double* st; int size; int top;public: stack(int csize) { size = csize; top = -1; st = new double[size]; } stack() { size = 10001; top = -1原创 2021-03-15 21:08:03 · 1735 阅读 · 0 评论 -
【C++】构造顺序栈
按照《数据结构与算法(张铭编著)》敲的????#include<iostream>using namespace std;class arrstack{private: int size; int top; char* st;public: arrstack(int csize) { size = csize; top = -1; st = new char(size); } arrstack() { top = -1; } ~arrstack原创 2021-03-15 21:05:15 · 250 阅读 · 0 评论 -
【C++】单链表实现多项式加法运算
题目:请使用单链表实现两个多项式的加法运算,其中多项式的项按指数从高到低排列。例如3x^2-x+2输入形式为32-1120。测试样例:样例1:输入样例:342312(第一个多项式)-23425160(第二个多项式)输出样例:34525160(求和结果)样例2:输入样例:310000212100-2110输出样例:31...原创 2021-03-14 22:57:27 · 2244 阅读 · 1 评论 -
【C++】顺序表实现多项式加法运算
题目:请使用顺序表实现两个多项式的加法运算,其中多项式的项按指数从高到低排列。例如3x^2-x+2输入形式为32-1120。测试样例:样例1:输入样例:342312(第一个多项式)-23425160(第二个多项式)输出样例:34525160(求和结果)样例2:输入样例:310000212100-2110输出样例:31000...原创 2021-03-14 22:52:43 · 3634 阅读 · 2 评论 -
【C++】设计算法求1000以内的质数数量
题目:设计算法求1000以内(包含1000)的质数数量//求1000以内的质数数量,分析算法的时间复杂度//author:Mitchell_Donovan//date:2021.3.2#include <iostream>#include<cmath>using namespace std;int countPrime(int n) { int count = n - 1; for (int i = 2; i <= n; i++) { for (原创 2021-03-14 22:47:48 · 1705 阅读 · 0 评论 -
【C++】递归算法解决汉诺塔问题
题目:设计递归算法解决汉诺塔问题,理解递归算法的特点和执行过程。汉诺塔问题:一块板上有三根针A、B、C。A针上套有n个大小不等的圆盘,按照大的在下、小的在上的顺序排列,要把这n个圆盘从A针移动到C针上,每次只能移动一个圆盘,移动过程可以借助B针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。从键盘输入需移动的圆盘个数,给出移动的过程。//汉诺塔模型,输入盘子个数,给出移动过程//author:Mitchell_Donovan//date:2021.3.2#include &l原创 2021-03-14 22:46:13 · 490 阅读 · 0 评论 -
【C++】制作华容道小游戏(附源码)
运行效果如下,玩法和数字华容道一样????源码如下????//author:Mitchell_Donovan//Date:2021.3.13#include<iostream>#include<stdlib.h>using namespace std;class HUARONG {private: int index; int* array;public: HUARONG(int n) { index = n; array = new i原创 2021-03-14 00:12:48 · 3140 阅读 · 5 评论