
数据结构后
文章平均质量分 62
「已注销」
这个作者很懒,什么都没留下…
展开
-
动态链表的操作
void creat(List *&L, int n)//创建{ List *s, *r; L = new List; L->next = NULL; r = L; for (int i = 0; i < n; i++) { s = new List; cin >> s->data; r->next = s; r = s; } r->nex...原创 2018-04-22 16:52:27 · 216 阅读 · 0 评论 -
邻接矩阵到邻接表
题目:邻接矩阵到邻接表邻接表的结构为 结构体链表数组,b[i]后面所连节点表示与点i相连的点#include<iostream>using namespace std;typedef struct D{ int data; struct D *next;}dian;void insert(dian d[],int i,int j ){ dian *p=&d[i]; while(...原创 2018-04-25 20:57:37 · 1013 阅读 · 0 评论 -
邻接表到邻接矩阵
题目:邻接表到邻接矩阵上一题反过来。。。#include<iostream>#include<stdio.h>#include<string.h> using namespace std;typedef struct B{ int data; struct B *next;}biao;void insert(biao b[],int i,int j){ biao...原创 2018-04-25 21:01:33 · 732 阅读 · 0 评论 -
有向图的出度计算
题目:有向图的出度计算有向图中点的出度即为邻接表中每个点后面的节点个数关于邻接表的建立请点这里#include<iostream>using namespace std;typedef struct B{ int data; struct B *next;}biao;void insert(biao b[],int i,int j){ biao *p=&b[i]; while(...原创 2018-04-25 21:12:40 · 8043 阅读 · 0 评论 -
无向图的连通分量计算
题目:无向图的连通分量计算连通分量即为连通子图的个数。用一个flag数组来存放每个点的标记0点i从0-n,每次遇到flag[]==0计数器++,每次将与点I邻接的点J进行标记,然后采用深度优先搜索的方式递归得标记与J邻接的点,最后与I在同一个连通分支的点均被标记,i往后走遇到有flag[]==0,说明有新的连通分支,于是进行相同的处理#include<iostream>using na...原创 2018-04-26 15:00:24 · 9686 阅读 · 0 评论 -
有向图的邻接表存储强连通判断
题目:有向图的邻接表存储强连通判断先把邻接表转换成邻接矩阵/xyx如果有向图强联通,则其必能构成环,即g[i][i+1]必不为0,g[n-1][0]也不为0(其实是错的,但是oj是这样认为的。。。)#include<iostream>using namespace std;int g[100][100];typedef struct B{ int data; struct B *nex...原创 2018-04-26 16:28:28 · 968 阅读 · 0 评论 -
希尔排序算法实现
题目:希尔排序算法实现希尔排序:分组插入排序若关键字为d,则分为d组,0 , 0+d, 0+2d, 0+3d, 0+4d......(<=n)1 , 1+d, 1+2d, 1+3d, 1+4d......(<=n)2 , 2+d, 2+2d, 2+3d, 2+4d......(<=n)......d-1 , d-1+d, d-1+2d, d-1+3d, d-1+4d......(...原创 2018-04-26 17:41:57 · 300 阅读 · 0 评论 -
堆的判断
题目:堆的判断小根堆:k[i] <= k[2*i] 且 k[i] <= k[2*i+1]大根堆:k[i] >= k[2*i] 且 k[i] >= k[2*i+1]#include<iostream>(小根堆判断)using namespace std;int main(){ int n; cin>>n; int a[n]; f...原创 2018-04-26 17:58:37 · 1982 阅读 · 0 评论 -
平衡二叉树的判定
题目 平衡二叉树的判定在二叉树节点中存放其平衡因子,平衡因子就是左子树和右子树的高度差,只要平衡因子的绝对值全部小于等于1就是平衡树#include<iostream>using namespace std;typedef struct Tree{ char data; struct Tree *l; struct Tree *r; int yinzi;}tree;int jue(in...原创 2018-04-26 18:22:21 · 258 阅读 · 0 评论 -
图的按录入顺序深度优先搜索
题目:图的按录入顺序深度优先搜索暴力dfs,唯一要注意的地方就是要标记被访问过的点,防止重复访问#include<iostream>using namespace std;int n; char str[100]; int map[100][100];int flag[100]; //标记点是否被访问过 void dfs(int x){ cout<<str[x]; ...原创 2018-04-26 19:04:11 · 1004 阅读 · 0 评论 -
图的按录入顺序广度优先搜索
题目:图的按录入顺序广度优先搜索从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接点的邻接点。如此进行下去,直到所有的结点都访问为止。采用队列来实现广度优先搜索,从对头开始跑,输出对头,把新的元素放入队尾,直到队列为空#include<iostream>using namespace std;char str[100];int n;int map[100][10...原创 2018-04-26 19:28:44 · 1341 阅读 · 1 评论 -
邻接矩阵存储简单路径
题目:邻接矩阵存储简单路径依然是深度优先,与之前不同的是,被标记的点每次遍历完之后要取消标记,以寻找其他路径,并且用栈来存放已访问过的点,遇到终点一次性输出#include<iostream>using namespace std;int n;int map[100][100];int zh[100]; //存放当前路径int flag[100];void dfs(int x,in...原创 2018-04-26 20:35:45 · 1908 阅读 · 0 评论 -
有向图的邻接矩阵存储根计算
题目:有向图的邻接矩阵存储根计算从点 0到点n,每次进行一次dfs,看是否能把所有的点全部标记,若可以,则为根#include<iostream>#include<string.h>#define INIT(flag) memset(flag,0,sizeof(flag))using namespace std;int n;int map[100][100];int fla...原创 2018-04-26 21:01:43 · 635 阅读 · 0 评论 -
堆排序算法
题目:堆排序算法此题题目描述有误,因为要求用堆排序求非递减序列,但只进行一趟(建立大根堆),但题目给出的样例答案却是一个小根堆,而完成整个堆排序的话得到的序列正是一个递减序列,所以。。。还是不管题目描述吧。。。建一个小根堆就好了 具体堆排序的算法请点击这里(步骤过于复杂,还是直接转载吧,而且这可以说是我能找到的最详细清晰的讲解了):http://www.cnblogs.com/ch...原创 2018-04-27 18:19:57 · 394 阅读 · 0 评论 -
最小生成树(prim算法)
题目:最小生成树(prim算法)prim算法简单来说就是加点法,如下图所示: 用邻接矩阵存放整个图的信息(注意无向图的对称性),用一个整型数组on[]来存放已经加入的点,用一个结构体数组存放每个点的信息,包括与之距离最短的点another,两点的权值weigh,以及flag标记是否已被选取。 先将第一个点放入on[]数组中,每次放入的时候所有未选用的点信息都需要更新(即比较上一次最短距...原创 2018-04-27 20:55:45 · 277 阅读 · 0 评论 -
交换排序算法的设计与实现——冒泡排序
题目:交换排序算法的设计与实现——冒泡排序额。。。还是直接撸代码吧。。。#include<iostream>using namespace std;int main(){ int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n-1;i++) { if(a[i...原创 2018-04-25 18:24:58 · 478 阅读 · 0 评论 -
哈希表(链地址法处理冲突)
题目:哈希表(链地址法处理冲突)连地址处理冲突:将产生冲突的值以链表的形式连起来好处:不会产生堆积,适合无法确定表长的情况,但是会增加空间消耗(指针需要空间)方法:采用结构体数组的方式,首先将结构体内每一个元素赋值 -1 NULL,然后采用插入的方式产生链表,同一个函数值得元素在一条链表上上代码:#include<iostream>using namespace std;typedef...原创 2018-04-25 18:12:03 · 15184 阅读 · 0 评论 -
二叉树的层次遍历
层次遍历输出tree *data[1000];int tou=0,wei=0;void print(tree *p){ data[tou]=p; wei++; while(tou!=wei) { cout<<data[tou]->data; if(data[tou]->left !=NULL) { data[wei]=data[tou]->left; w...原创 2018-04-23 08:15:16 · 162 阅读 · 0 评论 -
树,森林和二叉树的转换
在用二叉树表示森林时,每棵树化为一颗二叉树第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。具体操作代码(树转二叉树)森林转二叉树...原创 2018-04-23 08:15:50 · 317 阅读 · 0 评论 -
统计利用二叉树存储的森林中树的棵数
统计利用二叉树存储的森林中树的棵数因为每棵树均存在上一棵树的右节点,故往右dfs,每找一个计数器+1int num=0;void count(tree *p){ if(p==NULL)return; num++; count(p->r );//递归右子树}...原创 2018-04-23 08:16:07 · 446 阅读 · 0 评论 -
输出利用二叉树存储的普通树的度
题目树的度即为其孩子节点的个数,在储存树的二叉树中,节点左孩子为其第一个孩子节点,右节点为其兄弟节点,则要求节点的度,就要先找其左节点(第一个孩子),置计数器为1,然后往右节点遍历,计数器累加,最终找到计数器最大即为树的度int mx=0;void count(tree *p,int n){ if(p==NULL) return ; else { count(p->r ,n+1); c...原创 2018-04-23 08:15:35 · 577 阅读 · 0 评论 -
利用二叉树中序及后序遍历确定该二叉树的先序序列
利用二叉树中序及后序遍历确定该二叉树的先序序列中序:BFDAEGC 后序:FDBGECA后序遍历是先访问右节点,然后访问左节点,最后访问根节点中序遍历是先访问左节点,然后访问根节点,最后访问右节点 可以知道后序输出中的最后一个字符A即为该二叉树的根节点,然后在中序遍历中找到该节点A的位置,其左边BFD为A的左子树,其右边EGC为A的右子树 在中序中找到A左子树节点的个数和右子树节点的个...原创 2018-04-23 20:21:54 · 930 阅读 · 1 评论 -
利用二叉树中序及先序遍历确定该二叉树的后序序列
利用二叉树中序及先序遍历确定该二叉树的后序序列与上一题不同的是,先序序列中第一个元素为当前根节点,在中序中找到该元素后,确定左子树个数n和右子树节点个数m,那么先序序列中根节点后n个为其左子树,接下来m个位其右子树,然后递归处理中序:BFDAEGC 先序:ABDFCEG#include<iostream>#include<string.h>using namespace s...原创 2018-04-23 20:36:39 · 1131 阅读 · 0 评论 -
折半查找
折半查找就是在升序排列的数组中每次把所求元素与最中间的元素比较,若比中间大,就在右边找,比中间小,就在左边找#include<iostream>using namespace std;int num=0;int find(int a[],int m,int left,int right){ while(left<=right) { num++; int mid=(left+r...原创 2018-04-23 21:38:39 · 167 阅读 · 0 评论 -
输出利用先序遍历创建的二叉树中的指定结点的孩子结点
题目: 输出利用先序遍历创建的二叉树中的指定结点的孩子结点、利用递归遍历节点,将满足条件的节点地址保存 ,然后输出其左右节点即可#include<iostream>using namespace std;typedef struct Tree{ char x; struct Tree *left; struct Tree *right;}tree;void creat(tree *&a...原创 2018-04-24 13:01:20 · 1067 阅读 · 0 评论 -
输出利用先序遍历创建的二叉树中的指定结点的度
题目 输出利用先序遍历创建的二叉树中的指定结点的度利用递归遍历节点,将满足条件的节点地址保存 ,然后统计其左右孩子个数即可#include<iostream>using namespace std;typedef struct Tree{ char x; struct Tree *left; struct Tree *right;}tree;void creat(tree *&...原创 2018-04-24 13:06:08 · 557 阅读 · 0 评论 -
输出利用先序遍历创建的二叉树中的指定结点的双亲结点
题目:输出利用先序遍历创建的二叉树中的指定结点的双亲结点此题与之前不同的是,在查找所求节点时需将当前节点的孩子节点与所求节点比较,只要左孩子和右孩子其中之一满足条件,就保存当前节点,这就要求在根节点之上还需创建一个节点,这个节点中保存‘#’#include<iostream>using namespace std;typedef struct Tree{ char x; struct ...原创 2018-04-24 13:36:41 · 3414 阅读 · 1 评论 -
输出用先序遍历创建的二叉树是否为完全二叉树的判定结果
题目:输出用先序遍历创建的二叉树是否为完全二叉树的判定结果这道题的后台测试数据特别水,导致很多错误的代码也可以ac,这里是博主在看了许多其他大佬的代码之后找到的较为简单的正确答案利用结构体指针队列进行层次遍历,只要节点不为空,就将左右孩子全部入队列(NULL也进),因为是完全二叉树,所以在第一次遇到NULL之前的结点数应该等于总节点数代码如下:/* * ━━━━━...原创 2018-04-24 19:31:04 · 889 阅读 · 0 评论 -
二叉排序树的实现和查找
题目:二叉排序树的实现和查找二叉排序树中,根节点的左子树都小于根节点,右子树都大于根节点(这里没有包含等于的情况,若要包含等于,只需指定等于方向,然后改一下递归的判断条件即可) 采用依次插入的方式建立二叉排序树void insert(tree *&p,int n){ if(p==NULL) { p=new tree; p->data =n; p->l =N...原创 2018-04-24 20:29:52 · 1269 阅读 · 0 评论 -
哈希表(开放定址法处理冲突)
题目:哈希表(开放定址法处理冲突) 哈希表的基本思路是,设要存储的元素个数为n,设置一个长度为m(m>=n)的数组,每个元素ki的下标为对应函数f(ki),这样在查找ki的时候就可以通过下标f(ki)查找 在创建哈希表的时候会有所冲突,即ki和kj的函数值可能一样,因此有处理冲突的方式 线性探测法:当产生冲突时,如ki的函数值为3,而3号位已经有了元素,则从3号位往右检索,...原创 2018-04-25 18:03:19 · 1485 阅读 · 0 评论 -
哈夫曼译码
哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。...原创 2018-06-11 18:51:05 · 816 阅读 · 0 评论