摘要:
http://www.cnblogs.com/ttltry-air/archive/2012/07/29/2613886.htmlhttp://www.cnblogs.com/smallnest/archive/2009/12/19/1627796.html 阅读全文
摘要:
#include"stdio.h"#include"stdlib.h"typedef struct SqList{ int * elem; int length; int MaxSize;}SqList;void CreatList(SqList &L){ L.elem=(int *)malloc(100 * sizeof(int)); if(!L.elem) exit(0); else { L.length = 0; L.MaxSize = 100; int i, n; print... 阅读全文
摘要:
http://sjjp.tjuci.edu.cn/sjjg/datastructure/ds/web/duoweishuzu/duoweishuzu5.1.htm 阅读全文
摘要:
简介 树形结构是一类非常重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,因此在计算机领域里有着广泛应用,如操作系统中的文件管理、编译程序中的语法结构和数据库系统信息组织形式等。本章将详细讨论这种数据结构,特别是二叉树结构。1.树的相关术语1. 一个结点的子树的个数称为该结点的度。一棵树的度是指该树中结点的最大度数。 2. 树中度为零的结点称为叶结点或终端结点。 3. 树中度不为零的结点称为分枝结点或非终端结点。除根结点外的分枝结点统称为内部结点。 例如在图1中,结点A,B和E的度分别为3,2,0。其中A为根结点,B为内部结点,E为叶结点,树的度为3。 4. 阅读全文
摘要:
最优二叉树1.树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。2.树的带权路径长度(Weighted Path Length of Tree,简记为WPL) 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。 树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为: 其中: n表示叶子结点的数目 wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长... 阅读全文
摘要:
线索二叉树 1.定义 n个结点的二叉链表中含有n+1个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同 阅读全文
摘要:
许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。 二叉树的定义 1.二叉树的递归定义 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不 阅读全文
摘要:
广义表 广义表的定义 广义表是线性表的推广。 广义表一般记作LS=(d0,d1,...dn-1)当广义表LS非空时,称第一个元素d0为表头(Head),称其余元素组成的表(d1,d2,...dn-1)是LS的表尾(Tail)。显然,广义表的定义是一个递归的定义,因为在描述广义表时又用到了广义表的概念。下面列举一些广义表的例子。 1) A=( ); A是一个空表,它的长度为0。 2) B=( e ); 广义表B只有一个单元e,B的长度为1。 3) C=( a,( b,c,d ) ); 广义表C的长度为2,两个元素分别为单元素a和子表( b,c,d )。 4) D=( A,B,C ); ... 阅读全文
摘要:
线性表的基本概念1.线性表的定义: 线性表(linear list)是具有相同类型的n(n>=0)个数据元素a0,a1,...an-1 组成的有限序列。其中n为线性表的长度,当n=0,时成为空线性表,n>0,成为非空表在数学上,表现为:数据之间具有线性关系,一对一,一对多等2. 线性表中的数据元素要求具有相同类型。3.特征: (1) 有且仅有一个开始节点a0,他没有直接前驱,只有一个直接后继 (2) 有且仅有一个终端节点an-1,它没有直接后继,只有一个直接前驱 (3) 其他节点都有一个直接前驱和直接后继 (4) 元素直接为一对一的线性关系4、线性表中数据元素的相对位置是确定的,. 阅读全文
摘要:
简介堆栈和队列都属于线性结构,是两种在运算上受到某些限制的特殊线性表,他们比一般线性表更简单,被广泛应用于类型的程序设计中,可以用来存放许多中间信息,在系统软件设计以及递归问题处理方面都离不开堆栈和队列。栈栈的操作原则是:先进后出,后进先出二、栈的特点 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。三、栈的运算 1.初始化栈:INISTACK(&S) 将栈S置为一个空栈(不含任何元素)。 2.进栈:PUSH( 阅读全文
摘要:
(请网友结合前面的排序基本思想来理解排序的稳定性(8种排序的基本思想已经在前面说过,这里不再赘述)不然可能有些模糊) (1)直接插入排序:一般插入排序,比较是从有序序列的最后一个元素开始,如果比它大则直接插入在其后面,否则一直往前比。如果找到一个和插入元素相等的,那么就插入到这个相等元素的后面。插入 阅读全文
摘要:
排序算法所有排序算法汇总:http://en.wikipedia.org/wiki/Sort_algorithmcounting sort 资料 :http://www.cs.miami.edu/~burt/learning/Csc517.091/workbook/countingsort.html基数排序(radix sort) 资料:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/RadixSort.htm排序算法可以根据不同的特性划分为不同的类别,这些特性有: + 是否是 comparison-based + 时间复杂度... 阅读全文
摘要:
C 快速排序 快速排序描述1.从数列中挑出一个元素,称为 "基准"(pivot)2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。示例代码示例代码为C语言,输入参数中,需要排序的数组为arr[],取出一个元素为pivot,并根据 pivot值,将数组按照大于pivot和小于pivot分为两个区域,递归完成排序。复制代码 1 #include 阅读全文
摘要:
排序简介排序简介 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行时间中占有很大比重;并且排序本身对推动算法分析的发展也起很大作用。目前已有上百种排序方法,但尚未有一个最理想的尽如人意的方法,本章介绍常用的如下排序方法,并对它们进行分析和比较。1、插入排序(直接插入排序、折半插入排序、希尔排序); 2、交换排序(起泡排序、快速排序); 3、选择排序(直接选择排序、堆排序); 4、归并排序; 5、基数排序;我们所练习的排序主要是内部排序,所谓内部排序,就是整个排序过程都在内存进行的排序,称为内部排序;反之,若排序过程中要进行数据的内、外存交换,则称之为 阅读全文
摘要:
排序集锦http://www.cnblogs.com/longyi1234/archive/2010/03/22/1691904.html关于排序,似乎很简单的很常见的概念,却蕴含着很多技术,下面是从不同的角度,对排序的总结:1 按照排序特性分类首先按照排序本身的操作特性可以分为下面几种:插入排序 直接插入排序(Insert Sort) O(n^2)(稳定) 折半插入排序(Binary Insert Sort)(不稳定) 希尔排序(Shell Sort)(不稳定)交换排序 冒泡排序(Bubble Sort) O(n^2)(稳定) 快速排序(Quick Sort)?? O(nlogn)(不稳定) 阅读全文
摘要:
http://jsrun.it/norahiko/oxIy 阅读全文
摘要:
http://blog.csdn.net/myjava_024/archive/2008/11/04/3220319.aspx冒泡排序 冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。它是O(n^2)的算法。快速排序快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排 阅读全文
摘要:
排序有很多种方法啦,比如:1 直接插入排序 2 希而排序 3 冒泡排序 4快速排序 5堆排序 6合并排序 7基数排序 8外排序 等等,这里总结一些常用的方法,新人可以学习一下。 冒泡排序法 目的:按要求从大到小或从小到大排序。 基本思路:对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有 n 个元素,那么一共要进行 n-1 轮比较,第 i 轮要进行 j=n-i 次比较。(如:有5个元素,则要进行5-1轮... 阅读全文
摘要:
/************************************************************************** * 题目:编写程序实现快速排序与直接选择排序相结合的排序算法。要求对输入 * 的序列,用PARTITION过程分割成小于10个记录为一组的子序列,然后 * 对每个子序列实施直接选择排序。 * 函数: * Swap: 交换两个参数的值 * Rand: 产生 begin至end之间的随机整数 * StraightSelectSort: 直接选择排序 * PARTITION: 分区 * QUICKSOR... 阅读全文
摘要:
#includeusing namespace std;void BubbleSort(int *a,int istart,int len)//冒泡排序{ //a为数组,len为数组长度,对a[istart]~a[len-1]进行排序,小浮大沉 //从后面往前两两比较,小的上浮,直到最顶端a[istart]中存放的是剩余数组中最小的数。 for(int i=len;i>istart+1;i--) { if(a[i-2]>a[i-1]) { int temp=a[i-2]; a[i-2]=a[i-1]... 阅读全文