数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】

一、栈(Stack)

  1. 定义
    (1)只允许在一端进行插入和删除的线性表
    (2)先进后出
  2. 顺序栈
    (1)定义
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第1张图片
    (2)初始化
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第2张图片
    (3)进栈
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第3张图片
    Tip:在 指针+1 前 指针 为0(指针永远指向栈顶)
    (4)出栈
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第4张图片
    Tips:出栈在逻辑上删除了元素(指针下移)实际上要删除数据还是在的
    (5)共享栈
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第5张图片
  3. 链栈
    (1)定义
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第6张图片

二、队列(Queue)

  1. 定义
    (1)**只允许在一端时插入(队尾)另一端删除(队头)**的线性表

  2. 实现
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第7张图片

  3. 入队
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第8张图片
    Tips:
    (1)取模是循环利用已经删除掉数据的空节点(循环队列)
    (2)加上取模运算就是循环队列(有特殊判断情况),不加则是普通队列

  4. 循环队列
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第9张图片
    Tips:
    要牺牲一个空节点给rear,否则rear=front就出错了
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第10张图片

  5. 链式存储队列
    (1)定义
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第11张图片
    (2)初始化
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第12张图片
    (3)入队
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第13张图片
    (4)删除
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第14张图片

  6. 双端队列
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第15张图片

三、串(String)

  1. 定义
    (1)由零个或多个字符组成的有限序列
    (2)子串:串中任意个连续的字符组成的子序列【空串(零串)也子串】
    (3)空串【""】长度为0;空格串【"(空格)(空格)(空格)"】长度为3

  2. 基本操作
    StrAssign(&T,chars) | 赋值
    StrCopy(&T,S)| 复制
    StrLength(S) | 求串长
    CleanString(&S) | 清空串
    DestoryString(&S) | 销毁串

  3. 串的顺序存储
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第16张图片

  4. 串的链式存储
    数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第17张图片
    Tips:存不满用特殊字符代替

四、树(Tree)

  1. 定义
    (1)根结点子结点双亲结点孩子结点兄弟结点
    (2):树中一个结点的子结点的个数树的度:树中最大的度数
    (3)分支结点度大于0的结点叶子结点度为0的结点
    (4)结点的层次结点的高度结点的深度
A
B
c
D
E
F
G

Eg:B结点的层次:第二层(一共四层)、B结点的高度:3、D结点的深度:3
(5)有序树无序树
(6)路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的
(7)分支是有向的
(8)路径长度:路径上所经历的个数。Eg:A–>E路径长度为2
(9)森林:多棵互不相交的树的集合
2. 树的性质
(1)树中的结点数等于所有结点的度数加1,Eg:上图的树中的结点数为7
(2)度为m的树中第i层上至多有mi-1个结点(i≥1)
(3)高度为h的m叉树至多有( mh -1) / (m-1)个结点

  1. 二叉树
    1、定义
    (1)满二叉树:一棵高度为h,且含有2h -1个结点的二叉树为满二叉树。
    (2)对于编号为i的结点,若存在,其双亲的编号为i/2],左孩子为2i,右孩子为2i+1。
5
10
11

(3)完全二叉树
设一个高度为h、有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号1~n的结点——对应时,称为完全二叉树。
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第18张图片
Tips:
1)若i≤[n/2],则结点i为分支结点,否则为叶子结点
2)叶子结点只可能在层次最大的两层上出现。对于最大层次的叶子结点,都依次排在最左边的位置上。3)度为1的结点若存在,则可能有一个,且是编号最大的分支节点,并孩子结点一定是左结点。
3)度为1的结点若存在,则可能有一个,且是编号最大的分支节点,并孩子结点一定是左结点。

(4)二叉排序树
对任意结点若存在左子树或右子树,则其左子树上所有结点的关键字均小于该结点,右子树上所有结点的关键字均大于该结点。
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第19张图片
(5)平衡二叉树
树上任意结点的左子树和右子树的深度只差不超过1。
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第20张图片

(6)非空二叉树上的叶子结点数等于度为2的结点数加1
(7)非空二叉树上第k层上至多有2k-1个结点(k≥1)
(8)高度为h的二叉树至多有2h-1个结点(h>1)

2、二叉树的存储结构
(1)顺序存储
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第21张图片
Tips
1)如果没有用0或字符代替
2)顺序存储最坏情况下会非常浪费存储空间,比较适合完全二叉树

(2)链式存储
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第22张图片
(3)二叉树的遍历
Tips visit()可以写任何东西例如打印…
1)先序遍历
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第23张图片
算法书写
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第24张图片

2)中序遍历
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第25张图片
算法书写
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第26张图片

3)后序遍历
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第27张图片
算法书写
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第28张图片
4)层次遍历
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第29张图片
算法书写
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第30张图片
3、树的存储结构

1)双亲表示法
(1)定义数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第31张图片
2)孩子表示法

(1)定义数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第32张图片
4、哈夫曼树
(1)定义
1)树的带权路径长度(WPL):树中所有叶节点的带权路径长度之和
Eg:
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第33张图片
(2)哈夫曼树
数据结构笔记(二)【栈、链栈、队列、串、树、二叉树、哈夫曼树】_第34张图片

你可能感兴趣的:(笔记,数据结构)