目录
一、逻辑结构
四种逻辑结构类型:
- 集合:数据元素之间除了“属于同一个集合”的关系之外别无其它关系。
- 线性结构:除了开端和终端元素以外,其余元素有且仅有一个前驱元素和一个后继元素。
- 树形结构:一对多,开始元素唯一,除开始元素外,每个元素有且仅有一个前驱元素。
- 图形结构:多对多,所有元素都可能有多个前驱元素和后驱元素。
逻辑结构的二元组表示法:
二元组表示法和图形表示法的转换(在树形结构的基础上画线性结构):
二、存储结构
同一逻辑结构可以对应多种存储结构。
- 顺序存储结构
存储效率高,可对元素随机存取,但不便于数据修改。(C语言实现:int Array[7];)
- 链式存储结构
便于数据修改,在对元素进行插入或删除操作时仅需要修改相应结点的指针域不必移动结点;但存储空间的利用率较低,不能对元素进行随机存取。
- 索引存储结构
通过索引表按关键字查找速度快(先在索引表中利用关键字的有序性快速查找到该关键字的地址,再通过该地址在主数据表中找到对应的元素),但因增加索引表使存储空间较大。
- 哈希/散列存储结构
按关键字查找速度快,但需要解决冲突。基本思想是根据元素的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该元素的存储地址。与其他存储方法不同的是,哈希存储方法只存储元素的数据,不存储元素之间的逻辑关系。
哈希存储结构一般只适合要求对数据能够进行快速查找和插入的场合,并非适合任何数据的存储。
上述四种基本的存储结构既可以单独使用,也可以组合。同一种逻辑结构采用不同的存储方法可以得到不同的存储结构。
三、C/C++语言中常用的数据类型
- C/C++语言中的基本数据类型
C/C++语言中的基本数据类型有 int型(3个修饰符:short短整数、long长整数、unsigned无符号整数)、bool型(布尔型)、float 型、double 型和 char型。
- C/C++语言中的指针类型
- C/C++语言中的数组类型
- C/C++语言中的结构体类型
- C/C++语言中的共用体类型
union Tag //Tag共用体,把不同成员组织为一个整体,它们共享一段存储单位,以不同的方式被解释
{ short int n;
char ch[2];
};
union Tag u; //定义共用体类型Tag的一个共用体变量u并赋值
u.n=0x4142; //不可'u='这种直接赋值
- C/C++语言中的自定义类型
使用typedef关键字来指定一个新的数据类型名,如 typedef char ElemType
十五、树和二叉树
(一)、树的基本概念
树(tree)是由n(n≥0)个结点(或元素)组成的有限限集合(记为T)。
如果n=0,它是一棵空树,这是树的特例;
如果n>0,这n个结点中有且仅有一个结点作为树的根结点,简称为根(root),其余结点可分为m(m≥0)个互不相交的有限集 T、,Tz,…,Tm,其中每个子集本身又是一棵符合本定义的树,称为根结点的子树(subt ree)。
1. 树的逻辑表示方法
- 树形表示法:使用一棵倒置的树表示树结构,非常直观形象。
- 文氏图表示法:使用集合以及集合的包含关系描述树结构。
- 凹入表示法:使用线段的伸缩关系描述树结构。
- 括号表示法:用一个字符串表示树。
2. 树的基本术语
- 结点的度与树的度
树中某个结点的子树的个数称为该结点的度(degree of node)。树中所有结点的度中的最大值称为树的度(degree of tree),通常将度为m的树称为m次树(m-tree)。
- 分支结点与叶子结点
树中度不为零的结点称为非终端结点,又叫分支结点(branch)。度为零的结点称为叶子结点(leaf)。在分支结点中,每个结点的分支数就是该结点的度。如对于度为1的结点,其分支数为1,被称为单分支结点;对于度为2的结点,其分支数为2,被称为双分支结点,依此类推。
- 路径与路径长度
对于树中的任意两个结点ki和kj,若树中存在一个结点序列 (ki,.ki1,ki2....kin,kj),使得序列中除ki以外的任一结点都是其在序列中的前一个结点的后继结点,则称该结点序列为由ki到kj的一条路径(path).路径长度(path length)是该径所通过的结点数目减1(即路径上分支数目)。可见,路径就是从ki出发“自上而下”到达 kj 所通过的树中结点序列。显然,从树的根结点到树中其余结点均存在一条路径。
- 孩子结点、双亲结点和兄弟结点
在一棵树中,每个结点的后继结点被称为该结点的孩子结点(children)。相应地,该结点被称为孩子结点的双亲结点(parents)。具有同一双亲结点的孩子结点互为兄弟结点(sibling)。进一步推广这些关系,可以把每个结点对应子树中的所有结点(除自身外)称为该结点的子孙结点(descendant),把从根结点到达某个结点的路径上经过的所有结点(除自身外)称为该结点的祖先结点(ancestor)。
- 结点层次和树的高度
树中的每个结点都处在一定的层次上。结点层次(level)或结点深度(depth)是从树根开始定义的,根结点为第一层,它的孩子结点为第二层,依此类推,一个结点所在的层次为其双亲结点的层次加1。树中结点的最大层次称为树的高度(height of tree)或树的深度(depth of tree)。
- 有序树和无序树
若树中各结点的子树是按照一定的次序从左向右安排的,且相对次序是不能随意变换的,则称为有序树(ordered tree),否则称为无序树(unordered tree)。一般情况下,如果没有特