目录

  • 1 绪论
    • 1.1 数据结构的定义和基本术语
    • 1.2 数据的逻辑结构和存储结构
    • 1.3 算法和算法分析
  • 2 线性表
    • 2.1 线性表的定义及逻辑结构
    • 2.2 顺序存储结构
    • 2.3 链式存储结构
    • 2.4 应用:一元多项式的表示和相加
  • 3 栈和队列
    • 3.1 栈
    • 3.2 队列
  • 4 串
    • 4.1 资源
  • 5 数组
    • 5.1 数组
    • 5.2 广义表
  • 6 树和二叉树
    • 6.1 树的定义和基本术语
    • 6.2 二叉树
    • 6.3 遍历二叉树和线索二叉树
    • 6.4 树和森林
    • 6.5 哈夫曼树及其应用
  • 7 图
    • 7.1 图的定义和基本术语
    • 7.2 图的存储结构
    • 7.3 图的遍历
    • 7.4 图的应用
  • 8 查找
    • 8.1 查找的基本概念
    • 8.2 基于线性表的查找
    • 8.3 基于树的查找
    • 8.4 哈希表
  • 9 内部排序
    • 9.1 排序的定义和种类
    • 9.2 插入排序
    • 9.3 B-树和B+树
    • 9.4 交换排序
    • 9.5 选择排序
    • 9.6 归并排序和基数排序
  • 10 实验
    • 10.1 目的要求
      • 10.1.1 参考代码
树和森林

树有3种常用的存储结构,即双亲表示法,孩子表示法,孩子兄弟表示法。

1双亲表示法

用一组连续的存储空间(一维数组)存储树中的各结点,每个结点包含两个域。如图6.21所示。

1)数据域:存放结点本身信息。

2)双亲域:指示本结点的双亲结点在数组中位置。

双亲表示法的C语言描述如下:

#define MAXSIZE 100      //树中结点的最大数

typedef struct PTnode

{     tdatatype   data;    //存储数据信息的值

      int  parent;         //存储双亲位置

} PTnode;

PTnode tree[MAXSIZE];

2孩子表示法

孩子表示法也是用一维数组来存储树中各结点的信息,每个结点包含两个域,但结点的结构与双亲表示法中结点的结构不同。孩子表示法中的结点除了存放结点本身信息外,还保存一个链表的第一个结点的地址信息。

3孩子兄弟表示法(二叉树表示法)

孩子兄弟表示法,以二叉链表作为树的存储结构。链表中结点的两个域分别指向其第一个孩子结点和下一个兄弟结点,分别命名为firstchild域和nextsibling域。

 

结点的C语言描述如下:

typedef  struct  tnode

{   datatype  data;             //数据域

    struct  tnode *fistchild, *nextsibling;  //指针域,分别指向第一个孩子和右兄弟

}tnode;