数据结构简介与特点

数据结构简介与特点

线性表

基本操作:

  • 创建表
  • 求表长度
  • 查找元素
  • 输入元素
  • 删除元素
  • 便利元素

顺序表

结构特点:

  • 采用一组地址连续的存储单元来存储数据;
  • 表的存储容量长度不易改变;
  • 方便随机查找;
  • 适用于频繁访问元素的应用;
  • 不适用于频繁增删元素的应用。

单链表

结构特点:

  • 采用指针链接一系列存储单元来存储数据;
  • 动态分配存储空间;
  • 插入和删除元素的效率很高
  • 查找元素的效率较低。

循环链表

结构特点:

  • 所有元素一次连接,尾部元素连接到首部元素
  • 适用于环形结构处理场合
  • 便于特定步长便利循环表元素

双向循环链表

结构特点:

  • 每个元素拥有指向前后继的指针。
  • 便于元素的逆向查找和遍历。
  • 同时具备循环链表的所有优点。

静态链表

结构特点:

  • 用数组空间建立一个类似链表的逻辑结构,为数据元素增加一个标号成员来模拟链表元素的next指针。
  • 个方面性能与链表类似,插入、删除开销小,查找开销大。
  • 一次性分配大块空间,当链表动态分配节点时,只用从预先申请的空间中取一个节点即可,避免普遍链表频繁申请及释放内存时产生的开销。
  • 静态分配的大块空间可以被多个静态链表所共享,比静态分配内存的顺序表更加节约内存。

基本操作:

  • 创建栈
  • 入栈操作
  • 出栈操作
  • 查询栈的长度
  • 判断栈是否为空
  • 遍历栈
  • 情况栈
  • 销毁栈

顺序栈

结构特点:

  • 采用一组地址连续的存储单元来存储数据
  • 顺序栈的存储容量不易改变
  • 适用于后进先出的应用环境

链栈

结构特点:

  • 采用不连续的存储单元来存储数据
  • 链栈的存储空间灵活
  • 适用于特定的后进先出应用环境

队列

基本操作:

  • 创建队列
  • 入队操作
  • 出队操作
  • 查询队列长度
  • 判断队列是否为空
  • 便利队列
  • 清空队列
  • 销毁队列

顺序队列

结构特点:

队列是一种先进选出的线性表,允许一端进行删除,另一端进行插入。

  • 采用一组地址连续的存储单元来存储数据。
  • 顺序队列的容量不容易改变
  • 适于特定的先进先出类应用环境

链队列

结构特点:

  • 采用不连续的存储单元进行存储数据
  • 链队列的存储容量较为灵活
  • 适应特定的先进先出的应用环境

循环队列

结构特点:

在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从头到尾的元素之外,还需要设置两个指针域front和rear分别指向队列的队头和队尾元素位置。
假设顺序队列的长度为N,当队尾插入N个元素后,队头一次删除N个元素后,队列中元素的个数为0,队列为空,但是由于顺序队列的性质,此队列将无法继续使用,那么循环队列就是试图将这些空间利用起来,方式就是将顺序队列造成一个环的空间。循环队列的空和满的状态都存在 front = rear。
判断队列是空还是满的方法。

  • 设置另一个位置标记区别空和满。
  • 少用一个存储空间,约定front = rear.next 即为满。

基本操作:

  • 串的创建和存储
  • 串的复制
  • 求串的长度
  • 串的比较
  • 求子串
  • 串的连接

串的定长存储

定长顺序存储结构特点:

  • 采用一组地址连续的存储单元来存储数据
  • 串的存储容量长度不易改变
  • 适用于串的长度固定,或串的长度较小,或串的长度变化较小的应用
  • 不适用与串的长度变化较大的应用

串的堆分配存储

堆分配存储:

  • 采用堆分配存储结构动态的存储数据
  • 串的存储容量长度可以通过动态分配函数malloc()和free()改变,不会浪费内存,也不会出现串移除的情况。
  • 堆分配顺序存储结构对串的处理方便,操作中对串长度没有任何限制

串的块链存储

分块链表存储:

  • 采用若干个大小相等的链表块来存取数据
  • 结点的数据根据串的大小来决定
  • 串长不一定是结点的整数倍,链表的最后一个结点不一定被填满
  • 适用于串长较大的应用
  • 串值得链式存储结构占用存储量大且操作复杂

基本操作:

  • 创建树
  • 取根结点
  • 取双亲结点值
  • 求树的深度
  • 插入子树
  • 删除子树
  • 求某结点长子
  • 求某结点下一个兄弟
  • 判断树是否为空
  • 按层便利
  • 替换结点中的值
  • 销毁树

树的双亲表示法

结构特点:

将树在顺序存储的基础上加上双亲域。

  • 采用一组地址连续的存储单元来存储数据
  • 求结点的孩子需要便遍历整个结构

树的孩子兄弟表示法

树的孩子兄弟表示法,又称为树的二叉链表存储或二叉树表示法,指将树按照左孩子右兄弟的方式进行存储,结点的左指针指向孩子结点,右指针指向下一个兄弟结点。

二叉树

二叉树是一种特殊的树型结构,特点是每个结点的孩子结点树的度不超过2,并且二叉树的子树有左右之分,顺序不能颠倒。

基本操作:

  • 创建二叉树
  • 取根结点值
  • 取双亲结点值
  • 求二叉树深度
  • 插入子树
  • 删除子树
  • 求某结点左、右孩子
  • 求某结点左、右兄弟
  • 判断树是否为空
  • 先序、中序、后序、层序遍历
  • 替换树种的结点值
  • 销毁二叉树

二叉树的顺序存储

结构特点:

利用一组连续的存储单元依次自上而下,从左到右存储完全二叉树上的结点,存储过程中,将完全二叉树的结点编号为i的元素存储在如上定义的一维数组的下标为i-1的分量中。

若二叉树不是完全二叉树,那么存储二叉树时要考虑到结点位置的唯一性和准确性,将非完全二叉树作为完全二叉树来进行存储。对空结点,用0表示。

二叉树的链式存储

结构特点:

利用指针域来指向特点的结点。
一般来讲,表示二叉树的链表中的结点至少包含3个域:数据域和左指针、右指针域。数据域用来存放该结点的数据,左右指针分别指向该结点的左孩子和右孩子。
有时为方便查找双亲域,还添加一个指向双亲的指针域。
利用以上两种结点构成的二叉树的存储结构分别称为二叉链表树和三叉链表树。

线索二叉树

结构特点:

依遍历规则把每个结点对应的前驱和后继线索预存起来,这叫做“线索化”。
线索二叉树是在二叉链表作为基础的同时,增加两个标志域:Ltag和RLtag。
tag = 0 时 child 指向孩子。
tag = 1 时 child 指向线索。

线索化过程就是在遍历过程中修改空指针的过程。
将空的lchild改为节点的直接前驱。
将空的rchild改为结点的直接后继。

基本操作:

  • 创建图
  • 销魂图
  • 查询顶点值
  • 查询顶点序号
  • 插入顶点
  • 删除顶点
  • 修改顶点值
  • 增加弧
  • 删除弧
  • 深度优先遍历
  • 广度优先遍历

图的存在形式:

  • 有向图
  • 有向网
  • 无向图
  • 无向网

图结构的表示方法

  • 邻接矩阵
  • 邻接表
  • 十字链表
  • 邻接多重表

图的邻接矩阵表示

图的邻接矩阵表示特点:

  • 采用一维数组存储图的顶点信息
  • 采用二维数组构件邻接矩阵,存储图(网)的弧(边)信息。
  • 采用实现图的各种操作(求度、查询顶点、查询弧等)
  • 存储空间静态申请,不便于扩展顶点数量
  • 空间利用率低,对于稀疏图而言严重浪费空间。

图的邻接表表示

邻接表表示特点:

  • 采用链表存储每个顶点的邻接信息(弧信息)
  • 存储空间动态申请,便于扩展顶点数量。
  • 空间利用率较高,非常适合稀疏图
  • 便于查询邻接顶点
  • 统计有向图顶点的入度开销庞大,针对有向图可以构造逆邻接表

图的十字链表表示

十字链表表示特点:

  • 针对弧结点,增加入弧链表结构和出弧链表结构
  • 容易求得任意顶点的出度和入度,专用于有向图的操作
  • 结构实现比较复杂

图的邻接多重表表示

邻接多重表表示特点:

  • 每个边结点均被其两个依附顶点的边链表所共用。
  • 容易判断顶点之间的关系,专用于无向图的操作
  • 结构实现相对复杂

本博客内容到此结束,欢迎指正!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当涉及到教学计划安排数据结构时,以下是一种可能的安排方式: 1. 简介和基础知识:介绍数据结构的定义、重要性和应用领域。讲解基本术语和概念,例如组、链表、栈、队列、树和等。 2. 线性数据结构:讲解组、链表、栈和队列的原理、特点和操作。强调它们的适用场景和性能分析。 3. 非线性数据结构:学习树和的基本概念,包括二叉树、二叉搜索树、堆等。介绍它们的特性、遍历方法和常见应用。 4. 排序和搜索算法:深入研究常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序和归并排序。了解它们的原理、复杂度分析和实际应用。 5. 散列与哈希表:介绍散列函和哈希表的工作原理,以及解决冲突的方法。 6. 综合应用:讨论如何使用数据结构解决实际问题,例如算法、字符串匹配、模拟等。 7. 算法复杂度分析:学习如何分析算法的时间复杂度和空间复杂度,并了解最坏情况、平均情况和最优情况下的性能分析。 8. 数据结构的高级主题:介绍一些高级的数据结构,如平衡二叉树、B树、红黑树等。讨论它们的优势和应用场景。 9. 实践项目:通过编写实际的程序项目,巩固所学的数据结构和算法知识。 上述安排仅供参考,可以根据实际教学需求和学生水平进行调整和扩展。同时,鼓励学生进行自主学习和实践,通过解决实际问题来加深对数据结构的理解和应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Summer tree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值