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

一、栈(Stack)

  1. 定义
    (1)只允许在一端进行插入和删除的线性表
    (2)先进后出
  2. 顺序栈
    (1)定义
    顺序栈定义
    (2)初始化
    初始化
    (3)进栈
    进栈
    Tip:在 指针+1 前 指针 为0(指针永远指向栈顶)
    (4)出栈
    出栈
    Tips:出栈在逻辑上删除了元素(指针下移)实际上要删除数据还是在的
    (5)共享栈
    共享栈
  3. 链栈
    (1)定义
    链栈的定义

二、队列(Queue)

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

  2. 实现
    队列的初始化

  3. 入队
    在这里插入图片描述
    Tips:
    (1)取模是循环利用已经删除掉数据的空节点(循环队列)
    (2)加上取模运算就是循环队列(有特殊判断情况),不加则是普通队列

  4. 循环队列
    循环队列入队
    Tips:
    要牺牲一个空节点给rear,否则rear=front就出错了
    循环队列出队

  5. 链式存储队列
    (1)定义
    定义
    (2)初始化
    初始化
    (3)入队
    入队
    (4)删除
    在这里插入图片描述

  6. 双端队列
    在这里插入图片描述

三、串(String)

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

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

  3. 串的顺序存储
    在这里插入图片描述

  4. 串的链式存储
    在这里插入图片描述
    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的结点——对应时,称为完全二叉树。
是完全树
Tips:
1)若i≤[n/2],则结点i为分支结点,否则为叶子结点
2)叶子结点只可能在层次最大的两层上出现。对于最大层次的叶子结点,都依次排在最左边的位置上。3)度为1的结点若存在,则可能有一个,且是编号最大的分支节点,并孩子结点一定是左结点。
3)度为1的结点若存在,则可能有一个,且是编号最大的分支节点,并孩子结点一定是左结点。

(4)二叉排序树
对任意结点若存在左子树或右子树,则其左子树上所有结点的关键字均小于该结点,右子树上所有结点的关键字均大于该结点。
在这里插入图片描述
(5)平衡二叉树
树上任意结点的左子树和右子树的深度只差不超过1。
在这里插入图片描述

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

2、二叉树的存储结构
(1)顺序存储
顺序存储
Tips
1)如果没有用0或字符代替
2)顺序存储最坏情况下会非常浪费存储空间,比较适合完全二叉树

(2)链式存储
在这里插入图片描述
(3)二叉树的遍历
Tips visit()可以写任何东西例如打印…
1)先序遍历
在这里插入图片描述
算法书写
在这里插入图片描述

2)中序遍历
在这里插入图片描述
算法书写
在这里插入图片描述

3)后序遍历
在这里插入图片描述
算法书写
在这里插入图片描述
4)层次遍历
在这里插入图片描述
算法书写
在这里插入图片描述
3、树的存储结构

1)双亲表示法
(1)定义在这里插入图片描述
2)孩子表示法

(1)定义在这里插入图片描述
4、哈夫曼树
(1)定义
1)树的带权路径长度(WPL):树中所有叶节点的带权路径长度之和
Eg:
在这里插入图片描述
(2)哈夫曼树
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值