数据结构_3

以下是对树结构图结构的归纳

树结构

树结构与线性结构不同,它是非线性结构组织数据。在实际应用中,采用非线性结构来进行描述更简单、方便。

树是由n(n>=0)个结点组成的有穷集合。在任意一棵非空树中:1.有且只有一个称为根的结点;2.当n>1时,其余的结点分为m(m>0)个互不相交的有限集。树结构在计算机中的存储形式很多,这里只介绍多重链表存储形式。在多重链表中,每个结点有一个数据域和若干个指针域,指针域的指针指向该结点的下一个孩子结点。在利用多重链表表示树结构时,还分为定结点表示和不定结点表示。

二叉树(Binary Tree)使用最广,最具有代表意义。二叉树是一种特殊形式的树结构,它或者为空,或者由一个根结点加上两棵分别称为左子树和右子树的互不相交的二叉树组成。显然,这个定义是递归形式的。二叉树的结点包含两个指针域,一个数据域。两个指针域用来指向该结点的左孩子和右孩子。对二叉树的操作归根到底就是对结点的操作。

对于访问二叉树中的每一个结点的这个过程,成为二叉树的遍历。所谓二叉树的遍历,就是从一个结点出发,访问二叉树中所有的结点。对于二叉树的访问,显然也是以递归的形式进行的。其中有3种方案:先序遍历、中序遍历、后序遍历。先序遍历即从根节点出发,先序遍历左子树,再先序遍历右子树。中序遍历从树中的某个结点开始访问,后序遍历则是从最后一个结点访问(最底层子树的结点)。这三者的遍历都是先将左子树访问完后再访问右子树,是以递归的形式进行的。

创建二叉树,可以通过遍历操作逐个生成结点,从而创建一棵二叉树。遍历是二叉树最基本的操作!

图结构

图结构比树结构更为复杂,数据元素是“多对多”的关系,也就是任意两个数据元素之间都可以存在关系。

图是由顶点的非空有限集合V(由N>0个顶点组成)与边的集合E(顶点之间的关系)所构成。若图G的每一条边都没有方向,则称图G为无向图;若每一条边都有方向,则成为有向图。最常见的图的存储方法有两种:邻接矩阵存储方法和邻接表存储方法。邻接矩阵存储方法也称数组存储方法,其核心思想是:利用两个数组来存储一个图。这两个数组,一个是一维数组,用来存放图中的数据,一个是二维数组,用来表示图中顶点之间的相互关系,称为邻接矩阵。具体来讲其中二维数组的定义,A【i】【j】定义为,A【i】【j】={1(当顶点i,j之间有边),0(当顶点i,j之间无边)}。邻接矩阵不适于存储稀疏图,即边的数目很少的图,可以用邻接表来存储。邻接表存储方法是一种顺序分配和链式分配相结合的存储方法。它有链表和顺序数组组成。链表用来存放边的信息,数组用来存放顶点的数据信息。具体来讲,图中每个顶点对应建立一个链表,如果有n个顶点,其邻接表就含有n个线性链表。每个链表前设置一个头结点,称为顶点结点。顶点结点有数据域vertex和指针域next构成。

(图结构稍微复杂,暂时归纳至此)


下面简单介绍常用的查找和排序方法

1.顺序查找,也就是将所需查找的数据一个一个地按顺序地去比较查找。简单直观,对于被查找记录的文件排序没有要求,因此比较适合顺序文件的查找。同样也适合于对顺序表和链表中的元素进行查找。缺点是平均查找长度过大,查找效率低。

2.折半查找,也就是每次将读取的数据对半查找,又称为二分搜索(与数学中的二分法求近似值本质是一样的)。它要求所查找的数据文件是有序排列的,递增或递减。实现形式也属于递归。优点是效率高。

3.直接插入排序。插入排序的思想是第i次排序,将序列中第i+1个元素k[i+1]插入到一个已经按值有序的子序列(k1,k2,…,ki)中合适的位置,是插入后仍然有序。

4.选择排序。其思想是第i次排序从序列后n-i+1(i=1,2,…,n-1)个选一个最小的元素与该n-i+1个元素最前面那个元素进行位置交换。每次都将最小的往前放置。

5.冒泡排序。比较相邻两个数,符合要求则交换次序,不断地将大数往后挪。但是循环比较什么时候终止?基本思想是每一个次序都需要判断判断是否符合要求,但是当所有的数据 在比较过程中如果不进行交换的话,就表明排序已经完成,因此循环到此结束即可。

6.希尔排序。又称为缩小增量排序。Shell's sort又称为Diminishing Increment Sort。由希尔在1959年提出。缩小增量即每次将序列按间隔量gap划分,再对子序列排序。之后 再缩小gap,划分序列,对子序列排序,如此下去,直到gap=1为止。如何选取gap的值呢?这是比较复杂的问题,涉及了一些数学中尚未解决的难题。但是经验告诉我们gap每次都去序列的一般是一种常用且效果非常好的方法。

7.快速排序。目前被认为是最好的一种排序方法。其思想是:在当前的排序序列中(k1,k2,k3,……,kn)中任意选取一个元素,把该元素称为基准元素或支点(枢轴),把小于等    于基准元素的所有元素都移到基准元素的前面(序列的左边),把大于基准元素的所有元素都移到基准元素的后面(序列的右边),这样使得基准元素所处的位置恰好就是排序的最终位置,并把当前参加排序的序列划分为前后两个子序列。其中,前面的子序列中的元素都小于等于基准元素,后面的子序列的元素都大于基准元素。快速排序效率高的原因是每次的元素移动都是跳跃性的。

8.堆排序。一种特殊形式的排序,与二叉树有关。

 

posted on 2016-06-08 23:01  常清静  阅读(149)  评论(0编辑  收藏  举报

导航