数据结构_3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构_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.希尔排序。又称为缩小增量排序。
7.快速排序。目前被认为是最好的一种排序方法。
8.堆排序。一种特殊形式的排序,与二叉树有关。
以上是关于数据结构_3的主要内容,如果未能解决你的问题,请参考以下文章