- 博客(15)
- 收藏
- 关注
原创 数据结构(二分查找)
折半查找又叫二分查找,其基本思想是:在有序表中,取中间记录作为比较对象,如果查找的记录的关键码等于中间记录的关键码,则查找成功;若小于,则在左半区查找;若大于,则在右半区查找。不断重复直到查找成功,或没有要查找的记录,查找失败。 public int BinarySearch(List<int> list,int key ) { int mid = 0;
2017-11-28 13:56:02 507 1
原创 数据结构(堆排序和归并排序)
堆排序 在直接选择排序中,顺序表是一个线性结构,要从有n个记录的顺序表中选择出一个最小的记录需要比较n-1 次。如能把待排序的n个记录构成一个完全二叉树结构,则每次选择出一个最大(或最小)的记录比较的次数就是完全二叉树的高度,即log2n次,则排序算法的时间复杂度就是O(nlog2n)。这就是堆排序(Heap Sort)的基本思想。 堆排序中的堆分为最大堆和最小堆,最大堆的定义如下: 设顺序表
2017-11-28 13:50:47 520
原创 数据结构(排序)
1>排序是把一个记录(在排序中把数据元素称为记录)集合或序列重新排列成按记录的某个数据项值递增或者递减的序列。 2>在为排序依据的数据项称为“排序项”,也成为排序的关键码,关键码分为主关键码和次关键码。 3>排序分为内部排序和外部排序。内部排序指的是在排序的整个过程中,记录全部存放在计算机的内存中,并且在内存中调整记录之间的相对位置,在此期间没有进行内、外存的数据交换。 外部排序指的是在排序过程
2017-11-17 15:32:35 2181
原创 数据结构(单源最短路径)
单源最短路径指的是找到A,B两点之间路径中权值之和最小的路径。 狄克斯特拉算法(Dikastra) 对于求单源点的最短路径问题,狄克斯特拉(Dikastra)提出了一个按路径长度递增的顺序逐步产生最短路径的构造算法。狄克斯特拉的算法思想是:设置两个顶点的集合S和T,集 合S中存放已找到最短路径的顶点,集合T中存放当前还未找到最短路径的顶点。初始状态时,集合S中只包含源点,设为v0,然后从集合T中
2017-11-17 13:59:59 1101
原创 数据结构(最小生成树)
对于一个无相连通网,他的所有生成树中必有一棵边的权值总和最小的生成树,称之为最小代价生成树,简称最小生成树。 最小生成树必须满足三个条件: 1>构造的最小生成树必须包括n个顶点; 2>构造的最小生成树有且仅有n-1条边; 3>构造的最小生成树中不存在回路。 普利姆算法(Prim) 假设G=(V,E)为一无向连通网,其中,V为网中顶点的集合,E为网中边的集合。设置两个新的集合U和T,其
2017-11-17 12:31:48 775
原创 数据结构(图的遍历)
图的遍历指的是从图中的某个顶点出发,按照某种顺序访问每个顶点,使得每个顶点被访问且仅访问一次。 对于之前的邻接矩阵表示的图,加以更改,添加相应功能。 private int[] visited;//表示某个顶点是否被访问 public VexNode<T> this[int index] { get { return adjList[index]; }set { adjList[
2017-11-17 11:40:31 400
原创 数据结构(图的存储结构)
树形结构节点之间是一对多的关系,节点之间有明显的分支关系和层次关系。每一层的结点可以和下一层的多个节点相关,但只能和上一层的一个节点相关。而图中的顶点间的关系是任意的,没有明显的层次关系。 图的定义:图是由非空顶点集合和描述顶点间的关系–边或弧的集合组成。 图的基本术语 边,弧,弧头,弧尾:无向图之间顶点的连线称为边。有向图之间定点的连线称为弧。弧的始点称为弧尾,弧的终点称为弧尾 无向完全图
2017-11-17 10:41:13 878
原创 数据结构(哈夫曼树)
几个基本概念: 路径:从树中的一个结点到另一个结点之间的分支构成这两个结点间的路径。 路径长度:路径上的分支数。 树的路径长度:从树的根结点到每个结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。 结点的权:在一些应用中,赋予树中结点的一个有实际意义的数。 结点的带权路径长度:从该结点到树的根结点的路径长度与该结点的权的乘积。 树的带权路径长度:树中所有叶子结点的带
2017-11-16 16:43:36 563
原创 数据结构(树和二叉树的转换与遍历)
二叉树的遍历 先序遍历(DLR):先遍历根节点,再遍历左子树,最后遍历右子树 遍历结果:ABDHIEJCFG public void PreOrder(Node<T> root) { if (root==null) { return; } Console
2017-11-16 16:08:46 2698
原创 数据结构(二叉树)
二叉树的定义:二叉树(Binary Tree)是 n(n≥0)个相同类型的结点的有限集合。n=0 的二叉树称为空二叉树(Empty Binary Tree);对于 n>0 的任意非空二叉树有: (1)有且仅有一个特殊的结点称为二叉树的根(Root)结点,根没有前驱结点; (2)若n>1,则除根结点外,其余结点被分成了 2 个互不相交的集合TL,TR,而TL、TR本身又是一棵二叉树,分别称为这
2017-11-16 15:32:05 309
原创 数据结构(树)
- 树的定义树是n个具有相同类型的数据元素的有限集合。树的中数据元素叫做结点。n=0的树称为空树。对于n>0的非空树有: 1>有且仅有一个特殊的结点称为树的根(Root)结点,根没有前驱结点; 2>若n>1,则除根结点外,其余结点被分成了m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm称为这棵树的子树(Subtree)。-
2017-11-16 14:26:41 316
原创 数据结构(队列)
队列的定义:队列是插入操作限定在表的尾部,而其他操作限定在表的头部的线性表。把进行插入操作的尾部称为队尾(Rear),把进行其他操作的头部称为队头(Front)。堆列中没有元素时称为空队列。 队列的接口定义: interface IQueueDS<T> { int GetLength();//获取长度 bool IsEmpty();//判空
2017-11-16 11:25:48 288
原创 数据结构(栈)
栈和队列也是线性结构,线性表,栈和队列这三种数据结构的数据元素,以及数据元素之间的关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制。栈的操作只能在表的一端进行,队列的插入操作在表的一端而其他操作在表的另一端记性,所以把栈和队列称为操作受限制的线性表。 栈的定义:栈是操作限定在尾端的线性表。表尾由于要进行插入,删除等操作,所以它具有特殊的含义,把表尾称为栈顶,另一端是固定的,称为栈
2017-11-16 10:30:19 255
原创 数据结构(线性表)
线性表的逻辑结构线性结构的特点是数据元素之间存在一对一的线性关系。即:(1)除第一个元素之外所有元素位置前面都只有一个元素,称为直接前驱(2)出最后一个元素之外所有元素位置后面都只有一个元素称为直接后继。 根据线性表的基本操作作出相应的规约,即接口: interface IListDS { int GetLength();//获取长度 void C
2017-11-15 16:59:46 265
原创 数据结构(简介)
一、数据结构基本概念数据:数据时外部世界信息的载体,是计算机程序加工的原料。 数据元素:数据元素是数据的基本单位。 数据项:数据项是不可分割的。含有独立意义的最小数据单位,分为初等项(处理时不可分割,如籍贯)和组合项(处理时可以分割,如成绩)。 数据对象:性质相同的数据元素的集合。 数据类型:数据的取值范围和核对数据进行操作的集合。 数据结构:相互之间存在一种或多种关系的数据元素的集合。四
2017-11-15 15:37:07 371
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人