数据结构学习总结

本文十分零散,目的仅做自己整理使用,暂不对读者负责,阅读需谨慎。学习数据结构的材料是《大话数据结构》。

概览

数据结构包含线性结构、树形结构、图结构,重要的操作包括查找与排序(还有其他的各种操作)。线性结构中有线性顺序表、链表、静态链表,链表中有单链表、双向链表、循环链表,线性结构的典型应用有栈、队列与串(后面还没有写栈和队列,串),树形结构中有双亲表示法、孩子表示法、孩子兄弟表示法、二叉链表、霍夫曼树,图形结构中有邻接矩阵法、邻接表法、边集数组法,查找算法包括线性查找、折半查找、插值查找、斐波那契查找、二叉排序树查找、散列查找,排序算法包括交换类、选择类、插入类、归并类。

线性结构

线性结构是最简单的结构,每一个数据元素只有一个前驱和一个后驱。

实现线性结构可以采用顺序存储结构链式存储结构

静态链表:如果一种语言中既没有指针也没有对象引用机制,为了实现链表这种数据结构,可以基于数组建立静态链表。静态链表中的数组的每个元素中除了数据本身的数据项,还保存了一个后驱元素的数组下标,称为游标。这有点类似于树形结构当中的双亲表示法,区别在于双亲表示法当中可以有多个结点中存储同一个结点的下标,而静态链表当中每个元素的下标只能保存在一个元素的游标里。静态链表的数组中未被使用的元素组成了一个备用链表。删除结点时,该结点所在的数组元素会进入成为备用链表的第一个结点;增加结点时,会取用备用链表的第一个结点所在的数据元素。这样一来,在静态链表中插入结点或删除结点时,只需要修改结点中的游标,不需要像顺序线性表那样把后面的元素都移位了。

单链表还可以改进为循环链表或双向链表。循环链表:把单链表最后一个结点的空指针指向单链表的头指针,就形成了循环链表。这样从任何一个链表开始都可以对整个链表进行遍历,典型的应用例子为约瑟夫问题。双向链表:在单链表的结点中再多加入一个指针指向结点的前驱,就得到了双向链表,虽然比单链表更耗费空间,双向链表使用起来更加灵活。

线性表有两个非常重要的应用,分别是队列。“两栈共享空间”是对顺序栈的优化,可以最大限度利用开辟的空间。“循环队列”是对顺序队列的优化。在可控元素数量时,最好用顺序栈和顺序队列,否则用链栈和链队列。

串(线性存储结构、链式存储结构。模式匹配算法:朴素模式匹配算法是真实诚、真是慢啊,KMP模式匹配算法避免了i值不必要的回溯,KMP模式匹配算法改进避免了j值不必要的回溯)

线性表中每个数据元素只有一个前驱和一个后驱,而树形结构中每一个数据元素有一个前驱和多个后驱。数据结构要能保存数据本身以及数据相互之间的关系,表示该关系的载体就

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值