大话数据结构笔记

第一章 基本概念

数据

  • 数据:描述客观事物的符号。包括数据类型或者声音图像等非数据类型
  • 数据项: 一个数据元素可以由若干个数据项组成。它是数据不可分割的最小单位
  • 数据元素:组成数据的有一定意义的基本单位。又被称为记录
  • 数据对象: 性质相同的数据元素的集合
  • 数据结构: 是相互之间存在一种或者多种特定关系的数据元素的集合

逻辑

  • 逻辑结构: 数据对象中数据元素之间的关系

集合结构: 其中的数据元素除了属于同一个集合,无其他关系
在这里插入图片描述

线性结构: 数据元素之间是一对一的关系
在这里插入图片描述
树形结构: 数据元素之间存在一对多的关系
在这里插入图片描述
图形结构: 多对多
在这里插入图片描述
注: 每个数据元素看成节点,圆圈表示;关系用连接线表示,可带箭头

物理结构

  • 顺序结构: 顺序放在地址连续的存储单元里
    在这里插入图片描述
  • 链式结构: 任意的存储单元中,或不连续
    在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述

第二章 算法

特性

  • 有穷性:有限步骤
  • 确定性:含义唯一
  • 可行性:任意步可行
  • 输入输出

设计要求

  • 正确性
  • 可读性
  • 健壮性
  • 高效低存

第三章 线性表

  • 定义: 零个或多个数据元素的有限 序列
  • 在这里插入图片描述

n为长度。n=0则为空表

  • 例1:A和B并集
    在这里插入图片描述

链表的顺序存储结构

  • 顺序存储:一段连续的地址存放数据元素

缺点:移动、删除挪动元素太多

  • 链式存储:解决如上缺点

头指针:链表中第一个节点的存储位置
头节点:单链表的第一个节点前设置。头节点的数据域可以不存储信息,头节点的指针域指向第一个节点的指针
在这里插入图片描述

在这里插入图片描述

  • C语言中的结构指针表示
    在这里插入图片描述
    在这里插入图片描述

静态链表

  • 数组代替指针,描述单链表
  • data描述值,cur相当于next。存放后继元素的下表。这种数组称为静态链表
    在这里插入图片描述

第四章 栈与队列

  • 栈: 仅在表尾进行插入和删除操作的线性表
  • 队列: 只允许在一端进行插入操作,一端删除
  • 栈的相关结构

数据结构
在这里插入图片描述
进栈
在这里插入图片描述
出栈
在这里插入图片描述

栈:链式存储

在这里插入图片描述

第六章 树

  • 定义: n个结点的有限集。

有且仅有一个根节点
n>1时,其余结点可分为m个互不相交的有限集。每个集合本身是一棵树,并且称为根的子树

  • 注:

n>0时根结点唯一。
m>0是子树数目无限制,但必不相交。
下图不符合树的定义,子树相交了
在这里插入图片描述

6.1 相关定义

  • 结点分类

度:结点拥有的子树数目。度为0就是叶节点。树的度是各结点度的最大值。
森林:m个互不相交的树的集合。
在这里插入图片描述

  • 存储结构

双亲表示法,如下图
在这里插入图片描述
在这里插入图片描述

孩子表示法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

孩子兄弟表示法
在这里插入图片描述

二叉树

  • 特点:

每个结点最多两棵子树
左右子树有序

  • 五种形态:

空树
仅有根结点
根结点仅有左子树
根结点仅有右子树
根结点既有左子树也有右子树

  • 特殊树形态:

斜树:左斜树或右斜树
满二叉树:所有结点均有左右子树且所有叶子节点均在同一层
完全二叉树:在这里插入图片描述

  • 二叉树的特点:

叶子结点只在最下两层
最下层的叶子一定集中在做不连续位置
倒数第二层,若有叶子结点,一定都在右侧连续位置
结点度为1,则必为左孩子
同样节点的二叉树,完全二叉树的深度最小

二叉树的性质

  • 在这里插入图片描述
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 在这里插入图片描述

二叉树存储结构

  • 顺序存储
  • 二叉链表

遍历方式


  • 在这里插入图片描述


  • 在这里插入图片描述


  • 在这里插入图片描述

  • 层次

二叉树建立

在这里插入图片描述

在这里插入图片描述

线索二叉树

树、森林、二叉树

  • 树、二叉树

加线
给除长子外的孩子去线
在这里插入图片描述

  • 森林、二叉树

将每棵树转化成二叉树
将下一颗树的根结点作为上一颗树根结点的右孩子
在这里插入图片描述

  • 二叉树、树

加线:若某节点的左孩子存在,就将左孩子的右孩子、右孩子的右孩子、右孩子的右孩子的右孩子都作为此节点的孩子。将该结点与这些右孩子结点用线连接起来
去线:删除二叉树中所有结点与其右孩子结点的连线。
调整层次
在这里插入图片描述

  • 二叉树、森林

从根结点开始,若右孩子存在,就将右孩子结点的连线删除。再查看分离后的二叉树。若右孩子存在,则连线删除。直到所有右孩子连线都删除为止,得到分离的二叉树
再将每颗分离后的二叉树转化为树。
在这里插入图片描述

树与森林的遍历

  • 树的两种

先序遍历
后序遍历

  • 森林

先序遍历
后序遍历

赫夫曼树

  • 路径长度:从树中一个结点到另一个节点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 哈夫曼树构建

  • 哈夫曼编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值