【数据结构】总论

一、常用数据结构

 

数组  —— 连续存储单元存储

链表  —— 连续指针节点

队列  —— 先进先出

栈     —— 先进后出

堆     —— 通常是一个可以被看做一棵树的数组对象

树     —— 非线性层级数据结构

图     —— 很少用到

hashmap   —— 一种数组和链表组合的数据结构

hashtable  —— 一种数组和链表组合的数据结构

 

二、数组

 

数组是很多语言中都内置的内核数据结构,它是一个连续的内存块,支持按索引直接查找,时间复杂度为O(1)。但插入元素和删除元素的操作比较麻烦,最差情况下的时间复杂度为O(n)。

 

在很多封装的数据结构中,数组都是重要的组成成分,因为它是连续的内存,可支持指针寻址操作。但是在操作时需要注意的是边界溢出问题,因而,在数组内存不足时需要关心的操作往往是,原内存被销毁,新内存开辟时带来的系统开销。

 

数组操作的一个典型特例是内存池管理技术。

 

其他:待补充。

 

三、链表

 

链表是一种物理存储单元上非连续、无顺序的存储结构,它由一系列的节点组成,每个节点包含一组数据部分和一个或多个指向下一个节点的指针。链表的非连续和指针特点让链表元素的插入和删除变得很简单,但相应的,查找工作则变得不是很容易。通常,在已知插入点的情况下,插入/删除新元素的时间复杂度为O(1),最坏情况下查找的时间复杂度为O(n)。

 

按照链表节点的指针个数不同,链表可分为:单向链表,双向链表,多向链表。

按照链表中是否存在环形结构,链表可分为:有环链表和无环链表。

 

【单链表】

单向链表的常见操作:

创建链表、链表查找、插入或删除元素、链表反向、链表销毁。

 

单链表进阶操作:

链表元素去重、查找链表中间节点、查找链表倒数第 K 个节点、合并两个排序链表、查找两个链表第一个公共节点、查找链表的环。https://blog.csdn.net/weixin_38984102/article/details/79708742

 

【双向链表】

 

【多向链表】

不多见。

 

四、队列

 

队列和栈是在结构上相近的数据结构,有时他们可以相互转换。不同的是,队列是先进先出结构,栈是先进后出结构。他们的

典型操作是:Push(压入)和 Pop(弹出)。队列是一种操作受限制的线性表,通常使用链表或者数组来实现。

 

单链队列

循环队列

阵列队列

 

五、栈

 

六、堆

 

七、树

 

树是由n(n>0)个有限节点组成一个具有层次关系的集合把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树具有以下的特点:

  • 每个节点都只有有限个子节点或无子节点;

  • 没有父节点的节点称为根节点;

  • 每一个非根节点有且只有一个父节点;

  • 除了根节点外,每个子节点可以分为多个不相交的子树;

  • 树里面没有环路(cycle)

 

https://blog.csdn.net/smilejiasmile/article/details/82843278

常见二叉树:

1)二叉查找树

2)平衡二叉树

3)红黑树

4)B 树

5)B+ 树

6)B* 树

 

特殊的树:

1)字典树

2)决策树

3)默克尔帕特里夏树

 

八、图

https://www.cnblogs.com/wanghuaijun/p/7302303.html

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值