![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
qq_46027243
这个作者很懒,什么都没留下…
展开
-
简单的最小数C++实现
文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路该问题的一个简单解题思路,就是从左到右依次判断每一位数,若该位上的数字比后一位的数字大,则删掉该位置上的数字,然后回到开头继续执行判断操作,等到删够 k 位后,处理一下开头可能会有的 0 ,便可得到结果。如果没有数字比它的后一位大,即无法通过比较大小来删除,且已删除的位数不足 k,则从后往前依次删除,直到删够 k 位,处理一下开头可能会有的 0 ,便可得到结果。举例如下:n = 5, k = 3;a = 21053;第一次判原创 2020-11-19 15:32:35 · 1253 阅读 · 0 评论 -
合法栈输出
合法栈输出一,基本思想二、过程分析三,代码实现一,基本思想既然要求合法栈输出,那就用栈作为中间容器来进行操作,输出的结果自然满足题目。二、过程分析三,代码实现#include<iostream>#include<queue>#include<stack>using namespace std;int n;void output(queue<int> inqueue, stack<int> sta, queue<int&原创 2020-10-07 23:43:27 · 471 阅读 · 0 评论 -
C++实现Prim算法
C++实现Prim算法1,基本原理2,具体代码实现1,基本原理MST性质:设 N =(V,E)是一个连通图,U是顶点集V的一个非空子集。若边(u,v)是一条具有最小权值的边,其中u属于U,v属于V-U,则必存在一棵包含边(u,v)的最小生成树。举例:如图,从v1点开始,将v1点加入到U中,寻找从U到V-U的权值最小的边,为1,将v3加入U中,再次寻找从U到V-U的权值最小的边,为2,将v4加入到U中,再次寻找从U到V-U的权值最小的边,为2,将v5加入到U中,再次寻找从U到V-U的权值最小的边,为3原创 2020-10-02 09:23:15 · 4076 阅读 · 0 评论 -
C++实现kruskal算法
C++实现kruskal算法文章目录C++实现kruskal算法1,基本思想2,注意点3,代码实现1,基本思想假设共有n个节点,m条边,每次从未选择过的边集E中选取权值最小的一条边,若该最小边的端点不与已选边的端点构成回路,则将该边加入到最小生成树中,重复这一步骤直到选够n-1条边或无边可选。举例如下:图中共有9条边,第一次:选取最小一条边,权值为1,节点v1和v3被标注;第二次:选取最小一条边,权值为2,节点v1和v4被标注;第三次:选取最小一条边,权值为3,节点v1和v5被标注;原创 2020-10-02 20:13:38 · 6708 阅读 · 5 评论 -
C++实现Dijkstra算法,求解最短路径
C++实现Dijkstra算法1、原理2、使用步骤1.引入库2.读入数据总结1、原理1,找出源点v0到其他各点的直达路径,将其记录在dist数组中,dist[i]表示从v0到vi的最短距离。若从v0到vi无法直达,则将dist[i]记为无穷大Max。2,找出dist数组中未被访问过且与v0之间距离最短的点,将该点几被访问。2、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as原创 2020-10-03 16:14:17 · 3651 阅读 · 1 评论 -
C++实现Floyd算法,求解所有点间的最短距离
C++实现Floyd算法1,原理2,举例3,代码实现1,原理Floyd算法用来求解所有顶点间的最短距离,可以应用于有向图和无向图。基本思想是,先用矩阵存储各个点间的直达路径,然后将各个顶点依次加入,每加入一个顶点,就以该点为中间点,计算各个点间的路径在通过该中间点的情况下是否比原来的短,若短,则更新路径长度。将所有顶点都加入后,所得矩阵的每个数据就是对应两点间的最短路径。2,举例如图,以无向图为例1,用初始矩阵dist存储各个点的直达路径距离,dist[i][j]表示从vi到vj的距离,各个点到原创 2020-10-03 21:29:16 · 1447 阅读 · 0 评论 -
C++输出有向无环图的一个拓扑序列
C++输出有向无环图的拓扑序列1,拓扑序列拓扑序列的概念拓扑序列的应用2,拓扑排序步骤3,举例4,代码实现1,拓扑序列拓扑序列的概念在一个有向无环图中,若有弧 < i , j > 存在,则在拓扑序列中, i 一定排在 j 的前面,具有这种性质的线性序列称为拓扑有序序列。拓扑序列的应用(1),可以获得相互关联的若干事件的执行顺序;(2),可以判断一个有向图中是否有回路(环)。2,拓扑排序步骤(1)在有向图中选取一个入度为 0 (即没有前驱顶点)的顶点。(2)保存该顶点至输出结果中原创 2020-10-04 10:49:52 · 699 阅读 · 0 评论 -
C++输出有向无环图的所有拓扑序列
输出有向无环图的所有拓扑序列1,基本思想2,代码实现1,基本思想输出有向无环图的其中一个拓扑序列比较简单,输出所有的拓扑序列则要用到回溯的思想和递归的方法。这里暂不对回溯法做解释。2,代码实现#include<iostream>#include<vector>using namespace std;#define Max 9999vector<int> result; //用来保存并输出拓扑结果int n, m; //n 为顶点数,原创 2020-10-04 21:59:10 · 2810 阅读 · 5 评论 -
C++实现基数排序
#include<iostream>#include<string.h>#include<cmath>using namespace std;#define MaxSize 100void RadixSort(int arry[], int size) //对三位数的整形数进行基数排序,size为数组大小 { int temp[10][MaxSize]; //设置10个箱子,分别表示数字 0~9,每个箱子最多装 MaxSize个数据 int c...原创 2021-02-28 19:00:04 · 251 阅读 · 0 评论 -
C++实现归并排序
#include<iostream>using namespace std;void Merge(int arry[], int left, int mid, int right) //合并 { int *temp = new int[right-left+1]; //中转数组 int p = left; int q = mid + 1; int i = 0; //记录temp数组的第一个空位置 while(p<=mid&&q<..原创 2021-02-28 18:56:52 · 185 阅读 · 0 评论 -
C++实现堆排序
#include<iostream>using namespace std;void HeapAdjust(int arry[], int i, int size) //大小为size的数组arry,将其中以位置i为根节点的子树转换为小根堆 { for(int j=2*i+1; j<size; j=j*2+1) //将i结点的数据与其左右孩子比较,若其小于左右孩子,则与左右孩子中的较小值交换 { int x = arry[i]; if(j+1<s原创 2021-02-28 18:48:12 · 184 阅读 · 0 评论 -
C++实现快速排序
一,快速排序说明举例:21,25,49,26,16,8选择第一个元素21为中心元素,将比21小的元素放到前面,比21大的元素放到后面,则调整为:8,16,21,25,49,26对21之前的元素进行如上操作,则之前的部分调整为:8,16,无法再调整;对21之后的元素进行如上操作,则之后的部分调整为:25,49,26,25之前无元素,则只对25之后的元素进行如上操作,调整为:26,49,无法再调整。排序完成。二,快速排序实现#include<iostream>using name原创 2021-02-28 18:08:13 · 1095 阅读 · 0 评论 -
C++实现冒泡排序和选择排序
文章目录一,冒泡排序二,选择排序一,冒泡排序#include<iostream>using namespace std;void BubbleSort(int arry[], int size){ int flag = 0; //判断某一趟是否发生了交换,若没有发生,则排序结束 for(int i=0; i<size-1; ++i) //一共需要n-1趟 { flag = 0; for(int j=0; j<size-i-1; ++j) {原创 2021-02-28 17:52:51 · 373 阅读 · 0 评论 -
C++实现插入排序:直接插入,二分插入,希尔排序
文章目录一,插入排序及其种类二,直接插入排序三,二分插入排序四,希尔排序一,插入排序及其种类二,直接插入排序将未排序的元素与已排序的元素一一比较,来确定插入位置。#include<iostream>using namespace std;void InsertSort(int arry[], int size) //直接插入排序,size表示数组大小 { for(int i=1; i<size; ++i) { if(arry[i]<arry[i-1])原创 2021-02-28 17:41:20 · 218 阅读 · 0 评论 -
C++实现邻接表无向图及其两种遍历
#include<iostream>#include<string.h>#include<queue>#define MaxSize 100 //最大结点数 using namespace std;typedef struct ArcNode //存储与结点相连的边 { int adjvex; //该边所指向的顶点的位置 ArcNode* nextarc; //指向下一条与结点相连的边 int weight; //边的权重 }ArcNode;原创 2021-02-26 17:18:55 · 799 阅读 · 1 评论 -
C++实现邻接矩阵无向图及其两种遍历
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-02-26 17:17:35 · 742 阅读 · 0 评论 -
数据结构图的相关概念
文章目录一,图的定义和术语二,图的存储结构1,邻接矩阵存储2,邻接表三,图的遍历1,深度优先遍历2,广度优先遍历一,图的定义和术语二,图的存储结构1,邻接矩阵存储2,邻接表三,图的遍历1,深度优先遍历2,广度优先遍历...原创 2021-02-22 12:40:12 · 104 阅读 · 0 评论 -
哈夫曼树相关概念及C++实现
文章目录一,哈夫曼树基本概念二,构造哈夫曼树三,哈夫曼编码四,C++实现哈夫曼树一,哈夫曼树基本概念二,构造哈夫曼树三,哈夫曼编码四,C++实现哈夫曼树#include<iostream>using namespace std;#define MaxWeight 100typedef struct HTNode{ int weight; int parent, lch, rch; bool visit; }HTNode, *HuffmanTr原创 2021-02-19 16:53:51 · 167 阅读 · 1 评论 -
C++实现二叉树的链式存储及非递归遍历
#include<iostream>#include<queue>#include<stack>using namespace std;#define MaxSize 100typedef struct TreeNode{ int data; TreeNode* left; TreeNode* right; TreeNode() { data = 0; //数据域 left = NULL; right = NULL; }}Tre原创 2021-02-18 18:02:13 · 242 阅读 · 0 评论 -
C++实现二叉树的链式存储及三种递归遍历
文章目录#include<iostream>#include<queue>#include<stack>using namespace std;#define MaxSize 100typedef struct TreeNode{ int data; TreeNode* left; TreeNode* right; TreeNode() { data = 0; //数据域 left = NULL; right = NULL; }原创 2021-02-18 18:01:02 · 310 阅读 · 0 评论 -
C++实现二叉树的顺序存储及非递归遍历
文章目录#include<iostream>#include<stack>#include<queue>#include<string.h>using namespace std;#define MaxSize 101class BinTree{ public: BinTree(); void CreatTree(); //生成二叉树 void PreOrderTraverse2(int i=1); //先序非递归遍历原创 2021-02-18 17:59:36 · 397 阅读 · 1 评论 -
C++实现二叉树的顺序存储及三种递归遍历
文章目录#include<iostream>#include<stack>#include<queue>#include<string.h>using namespace std;#define MaxSize 101class BinTree{ public: BinTree(); void CreatTree(); //生成二叉树 void PreOrderTraverse1(int i=1); //先序递归遍历原创 2021-02-18 17:49:24 · 583 阅读 · 1 评论 -
树,二叉树,森林的相关知识
文章目录一,树的相关概念1,树的定义2,树的基本术语二,二叉树的相关概念1,二叉树定义2,满二叉树3,完全二叉树4,二叉树的两种存储方式5,二叉树的性质6,遍历二叉树一,树的相关概念1,树的定义2,树的基本术语二,二叉树的相关概念1,二叉树定义2,满二叉树3,完全二叉树4,二叉树的两种存储方式5,二叉树的性质6,遍历二叉树例子:根据二叉树序列确定二叉树。...原创 2021-02-17 14:57:57 · 146 阅读 · 1 评论 -
C++实现顺序队列和链队列
文章目录一,队列的相关概念1,队列的定义2,队列的应用二,顺序队列实现三,链队列实现一,队列的相关概念1,队列的定义2,队列的应用二,顺序队列实现#include<iostream>using namespace std;#define MaxSize 100template<typename T>class Queue{ private: int front; //队头 int rear; //队尾 T *list; public:原创 2021-02-14 21:14:43 · 271 阅读 · 0 评论 -
C++实现顺序栈和链栈
文章目录一,栈的相关概念1,栈的定义和特点2,入栈和出栈3,栈的应用二,顺序栈的实现三,链栈的实现一,栈的相关概念1,栈的定义和特点2,入栈和出栈3,栈的应用二,顺序栈的实现#include<iostream>using namespace std;#define MaxSize 100template<typename T>class Stack{ public: Stack(); bool IsEmpty(); int Ge原创 2021-02-14 18:54:23 · 161 阅读 · 0 评论 -
C++实现线性表的链式表示
文章目录一、链表相关概念1,相关名词2,链表的特点3,链表分类4,单链表表示二、单链表的C++实现一、链表相关概念1,相关名词2,链表的特点3,链表分类4,单链表表示二、单链表的C++实现typedef struct{ string name; int age;}Student; //定义结点的数据域 typedef struct LNode{ Student data; //结点的数据域 LNode* next; //结点的指针域 }LNode, *原创 2021-02-13 19:03:51 · 390 阅读 · 0 评论 -
C++实现线性表的顺序表示
线性表的顺序表示C++实现一,线性表的定义和特点1,线性表的定义2,线性表的特点二,线性表的顺序存储表示1,顺序存储定义2,顺序存储举例3,顺序存储优缺点三,线性表顺序表示的实现一,线性表的定义和特点1,线性表的定义2,线性表的特点二,线性表的顺序存储表示1,顺序存储定义2,顺序存储举例3,顺序存储优缺点三,线性表顺序表示的实现这里以图书为基本元素来实现一个保存图书信息的线性表。#include<iostream>using namespace std;#d原创 2021-02-10 19:13:36 · 315 阅读 · 0 评论