常见的基本数据结构

1.数组

内存中连续存储,索引方便,但扩容和增删麻烦,并且只能存储同种类型数据

2.栈

只能在一端(栈顶)进行操作的线性表,栈的操作包括入栈,出栈和取栈顶元素。栈符合先进后出原则,主要应用于递归中。

3.队列

也是线性表,先进先出,在一端添加元素,在另一端取出元素,主要用于多线程阻塞列管理中。

4.链表

物理存储单元非连续,非顺序,其数据元素的逻辑顺序通过指针来实现。每个节点包括元素和指向下一个节点的指针,因此链表中含有大量指针占据空间。优点是增删快,缺点是查找不方便,适用于数据量小,且需要频繁增删操作的场景。

5.树

树可以看作是一种特殊的双向链表。树的度指树的宽度,即结点的分支数。树的深度指最大层数。

前序遍历:根-左-右 (针对子树也是如此)  中序遍历:左-根-右   后续遍历:左-右-根

性质:

高度为n的树至少有n+1个结点,最多有2^n - 1 个结点;

第n层最多有2^(n-1)个结点;

6.散列表(哈希表)

根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

记录的位置 = f(key)

其综合了数组和链表的特性,寻址容易,增删也方便。

最常用的一种方法——拉链法,我们可以理解为“链表的数组”。当存储记录时,通过散列函数计算出记录的散列地址;当查找记录时,我们通过同样的是散列函数计算记录的散列地址,并按此散列地址访问该记录。

优点:不论哈希表中有多少数据,查找、插入、删除(有时包括删除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要O(N)的时间级。哈希表不仅速度快,编程实现也相对容易。如果不需要有序遍历数据,并且可以提前预测数据量的大小。那么哈希表在速度和易用性方面是无与伦比的。

缺点:它是基于数组的,数组创建后难于扩展,某些哈希表被基本填满时,性能下降得非常严重,所以程序员必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程)。

7.堆

堆可以看作一棵树的数组对象:堆中某个结点的值不大于(小于)其父结点;堆总是一颗完全二叉树;

一般用于堆排序

8.图

两大元素:顶点和边

如果有一个问题可以通过顶点和边表示出来,那么就可以将问题用图画出来,然后使用著名的图算法(比如广度优先搜索或者深度优先搜索)来找到解决方案。

常用的存储方式有两种:邻接矩阵和邻接表。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值