数据结构
luo___ye
任何一件小事,坚持下去,都可以成为了不起的大事。
展开
-
二叉树的建立以及遍历C/C++
一、 二叉树的定义 二叉树(Binary Tree)是个有限元素的集合,该集合或者为空,或者由一个称为根(root)的元素及两个不相交的、分别被称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树,在二叉树中,一个元素也成为一个节点。 二、 二叉树的数据结构 下面为二叉树链式存储结构的定义: /* *定义二叉树的数据结构 */typedef ch原创 2016-10-23 15:34:07 · 1033 阅读 · 0 评论 -
选择排序之简单选择排序与堆排序C/C++
一、简单选择排序 简单选择排序即每次选出最小或最大的元素与当前长度数组的最末尾进行交换,进行n-1次交换即可得到有序序列。1、平均时间复杂度为O(n^2) 2、最好与最坏时间复杂度都为O(n^2) 3、空间复杂度为O(1)代码实现/* *进行简单的选择排序 */#include<stdio.h>#define MaxSize 100/* *进行选择排序 */void selectSo原创 2017-03-11 12:37:37 · 367 阅读 · 0 评论 -
交换排序之冒泡与快排C/C++
一、冒泡排序 相信冒泡排序大家都知道,无非是每一趟排序时将相邻两个元素进行交换,根据从大到小或从小到大的顺序,交换起来略有不同,如此进行n-1次排序即可得到整个数组有序。1、平均时间复杂度为O(n^2) 2、最好情况下时间复杂度为O(n),此时设置标志为,元素有序时直退出 3、最坏之间复杂度为O(n^2) 4、空间复杂度为O(1)代码实现:/* *进行数组的冒泡排序 */#include原创 2017-03-11 11:13:27 · 456 阅读 · 0 评论 -
插入排序的三种算法C/C++
一、直接插入排序 1、平均时间复杂度为O(n^2) 2、最好情况为O(n) 3、最坏情况下为O(n^2) 4、空间复杂度为O(1)算法实现为:/* *直接插入排序 */#include<stdio.h>#define MaxSize 100/* *a为待排序的数组,length为数组长度 */void inSort(int a[] , int length) ;/* *进行数组元原创 2017-03-10 20:51:09 · 757 阅读 · 0 评论 -
运用Floyd算法求得带权有向图任意两点间的最短路径C/C++
一、 算法过程1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则G[i][j]=d,d表示该路的长度;否则G[i][j]=无穷大。定义一个矩阵D用来记录所插入点的信息,D[i][j]原创 2016-11-26 17:30:35 · 9282 阅读 · 1 评论 -
运用Dijkstra算法求得单源最短路径C/C++
额…,最近博客有一段时间没有更新了,本来打算每周两篇的打算被打断了,不断的意识到坚持一件事长久的做下去是多么的不易,当然也不是说上周什么事情都没有做,只是计算机图形学的作业确实是花了一段时间,虽然最终的效果可能没有那么理想,但确实是自己想要做好的一件事,所以觉得花的时间也是值得的,学一些新的技术固然不错,但个人觉得计算机系的必须要有着坚实的基础,所以数据结构与算法一定是我坚持的方向,好了,先展示下我原创 2016-11-26 11:22:03 · 1962 阅读 · 0 评论 -
广义表的建立与一般操作C\C++
广义表的建立与一般操作C\C++一、广义表的概念 广义表是线性表的推广,但线性表的元素仅限于原子项,原子作为结构上不可分割的成分,它可以是一个数或一个结构,若放松对表元素的这种限制,允许它们具有自身独立类型结构,就产生了广义表的概念。 广义表是n(n>=0)个数据元素a1,a2,......ai,......,an的有序序列,一般记作:原创 2016-10-20 20:41:24 · 7450 阅读 · 1 评论 -
构造哈夫曼树算法C/C++
一、哈夫曼树的基本概念 最优二叉树也称哈夫曼树,是指对于一组带有确定权值的叶节点,构造的具有最小带权路径长度的二叉树。二、哈夫曼树的结构 假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的原创 2016-10-30 10:24:57 · 3344 阅读 · 1 评论 -
线索二叉树的建立与遍历C/C++
dzfdsf原创 2016-10-29 23:13:58 · 3182 阅读 · 0 评论 -
运用栈求解迷宫问题C/C++
用栈解决基本的迷宫问题C/C++1、问题描述:设置迷宫为m*n的二维数组,起点坐标为(1,1),中点坐标为(m,n),0为通路,1为死路,为防止数组越界将四周设置边界1,即数组变为(m+2)*(n+2)数组,迷宫如下.... 迷宫11111111111011101111原创 2016-10-07 16:18:39 · 24093 阅读 · 17 评论 -
Prim与Kruskal求解带权图的最小生成树C/C++
一、图的最小生成树 由生成树的定义可知,无向连通图的最小生成树不是唯一的,连通图的一次遍历所经过的边的集合及图中所有顶点的集合构成了该图的一棵生成树,对连通图的不同遍历,可能的到不同的生成树。 如果无向连通图是一个网,那么,它所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小生成树,简称最小生成树。二、构造最小生成树的Prim算法 假设G(V,E原创 2016-11-07 19:16:11 · 3799 阅读 · 0 评论 -
图的生成树算法C/C++
一、图的生成树 设E(G)为连通图G中所有边的集合,则从图中任意顶点出发遍历图时,必将E(G)分成两个集合T(G)和B(G),其中T(G)是遍历过程中经历边的集合;B(G)是剩余的边的集合。显然T(G)和图G中所有顶点一起构成连通图G的极小连通子图,即可知它是连通图的一颗生成树。 二、生成树的构造方法 1、通过深度优先遍历构建图的生成树 2、对于非连通图,通过这样的遍历得到的是生成森林原创 2016-11-06 16:52:31 · 3459 阅读 · 0 评论 -
图的创建以及深度与广度优先遍历C/C++
一、图的存储结构 图有几种最常见的存储结构:邻接矩阵、邻接表和十字链表。 下面仅以邻接表表示法进行图的操作 邻接表: 邻接表(Adjacency List)是一种顺序存储结构与链式存储相结合的图的存储方法。邻接表类似于树的孩子链表表示法。就是对于图G中的每个Vi,将所有邻接于Vi的顶点Vj链成一个单链表,这个单链表就称为顶点Vi的邻接表,再将所有点的邻接表表头放到数组中,就构成了图的邻接表。原创 2016-11-05 20:25:00 · 8087 阅读 · 11 评论 -
实现稀疏矩阵相乘C/C++
实现稀疏矩阵相乘C/C++1、问题描述:已知稀疏矩阵A(m1,n1)和B(m2,n2),求乘积C(m1,n2)。A=|3 0 0 7| B=|4 1| C=|12 17| |0 0 0 -1| |0 0| |0 -2| |0 2 0 0| |1 -1| |0 0|原创 2016-10-14 20:34:44 · 21123 阅读 · 1 评论 -
python实现快速排序
def one_division(data , start , end): temp_value = data[start] while start < end: while data[end] >= temp_value and start < end: end -= 1 if data[end] <...原创 2019-03-18 10:36:19 · 147 阅读 · 0 评论