黑马程序员技术交流社区

标题: 【太原校区】数据结构(第二部分) [打印本页]

作者: miaohangbo    时间: 2018-12-7 14:10
标题: 【太原校区】数据结构(第二部分)
第二部分 线性结构
4、线性表
4.1线性表
线性表:零个或多个数据元素的有限序列。(概念:空表、直接前驱、直接后继)(操作:插入、删除)
线性表的顺序存储结构:指在一段地址连续的存储单元依次存储线性表的数据元素。(用数组来实现这一结构)
时间复杂度:
存储读取:O(1)
插入删除:O(n)
顺序存储结构的优缺点
线性表的链式存储结构:用任意一种存储单元存储数据元素,存储单元可以是连续的也可以是不连续的。
头结点与头指针异同
4.2单链表:
线性表的链式存储结构,即单链表
单链表时间复杂度:查找O(n)、插入O(n)[头插法,尾插法]、删除O(n)
单链表结构和顺序存储结构对比:
a、频繁查找很少删除和插入适用线性表的顺序存储结构(游戏中人物信息[顺序],人物装备[链式]);
b、线性表长度不确定情况下[链式]
4.3静态链表:
用数组描述的链表。不移动数据元素,只修改下标。
4.4循环链表:
将单链表尾部指针指向头,使整个单链表形成一个环,这种首尾相接的单链表就是单循环链表,简称循环链表。
指针指向尾部查找头结点和尾结点比较方便
4.5双向链表
在循环链表的基础上每个结点增加一个指向前驱的指针域。(redis 中list类型,头)
4.6总结:
4.6.1JAVA语言数据结构的实现
List
  
List实现
  
使用场景
数据结构
ArrayList
数组形式访问List链式集合数据,元素可重复,
  
访问元素较快
数组(顺序存储)
Vector
数组形式访问List链式集合数据,元素可重复,
  
访问元素较快,线程安全
数组(顺序存储)
LinkedList(queue)
链表方式的List链式集合,元素可重复,元素
  
的插入删除较快
双向链表(链式存储)
Set
  
Set实现
  
使用场景
数据结构
HashSet
无序的、无重复的数据集合
基于HashMap(链式存储)
LinkedSet
维护次序的HashSet
基于LinkedHashMap(链式存储)
TreeSet
保持元素大小次序的集合,元素需要实现Comparable接口
基于TreeMap(链式存储)
Map
  
Map实现
  
使用场景
数据结构
HashMap
哈希表存储键值对,key不重复,无序
哈希散列表
LinkedHashMap
是一个可以记录插入顺序和访问
  
顺序的HashMap
存储方式是哈希散列表,但是维护
  
了头尾指针用来记录顺序
TreeMap
具有元素排序功能
红黑树
WeakHashMap
弱键映射,映射之外无引用的键,
  
可以被垃圾回收
哈希散列表
5、栈与队列
5.1栈(线性表)
栈(Stack、LIFO)限定在表的一端进行插入和删除操作的线性表。(操作:进栈、出栈)
(栈顶、栈底)
栈的应用
a、斐波那契数列实现
兔子例子:
递归和迭代区别:迭代使用循环结构,递归使用选择结构;
b、四则运算表达式求值:后缀表达式求值(逆波兰)
一种不需要括号的后缀表示法,称为逆波兰。
后缀表示法表示为
5.2队列
队列(queue、FIFO)限定在表一端进行删除,而在另一段进行插入的线性表。(队头、队尾)
循环队列:把队列头尾相接的顺序存储结构称为循环队列。(为解决假溢出问题)
队列存储结构
队列顺序存储结构:
队列链式存储结构:(其实就是单链表,只是在头出,尾部插入)
队列应用如(Spark资源调度机制、消息队列kafka、生活排队买票等等)
总结
6、串(线性表)
串是由零个或多个字符组成的有限序列。
s是串的名称,用双引号括住序列式字符串的值。空串、子串、主串。
ASCII(128-256)、Unicode(65万);其中unicode前256位与ASCII相同。
与线性表区别:线性表主要是对单个数据元素操作,而串是对子串应用操作(查找,替换等),本质上串也是线性表的一种扩充。
顺序存储结构:
在高级语言中存储空间是动态分配的,如:C语言的 malloc()和free()管理。
链式存储结构:
一个结点存储一个或多个数据元素,无数据元素则用#代替。性能不如顺序存储结构。
朴素模式匹配算法:(普通的匹配算法)
串的定位操作称为模式匹配
如:s="goodgoogle" t="google"
平均时间复杂度O(n+m);
最坏情况下O((n-m+1)*m);
效率低;
KMP模式匹配算法:
为避免大量重复匹配,所以提出了克努特-莫里斯-普拉特算法(KMP算法)。
最坏情况是O(m+n);
http://baike.baidu.com/link?url=r2SB_2hU3KPYmMPuOe8LBojLIqWruheWvyvNjrUoG7i1JmedJcYUJw8genvRHCGT2nQIYiBhFQjvGl0Ow8lBWg83VfMCoc4-6BfmkQTqep3


作者: java4期高某某    时间: 2018-12-7 14:31
厉害厉害,好贴
作者: lantingyuxiu    时间: 2018-12-7 14:49
赶紧收了!厉害厉害!
作者: 阿星    时间: 2018-12-7 15:11
厉害厉害
作者: 张兆秋    时间: 2018-12-7 16:56
到位
作者: 王高飞    时间: 2018-12-7 16:56
666   保存下来了   正在慢慢研究
作者: Vicky韦    时间: 2018-12-7 17:15
不错
作者: liudongjie    时间: 2018-12-7 17:18

作者: 张志辉    时间: 2018-12-7 17:59
赞赞赞
作者: liuchengwei1    时间: 2018-12-7 18:34
挺好!!!6666
作者: 一个人一座城0.0    时间: 2018-12-8 12:04
看看不说话
作者: cuichang1    时间: 2018-12-13 13:53

作者: Julien27    时间: 2018-12-13 14:05
【数据结构一】在此:http://bbs.itheima.com/forum.php ... E%E7%BB%93%E6%9E%84
请叫我好人

作者: 郝永亮    时间: 2018-12-19 13:36
优秀




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2