基本数据结构小结

数组

数组是一种线性表数据结构.它用一组连续的内存空间, 来存储一组具有相同类型的数据, 
连续的内存空间,  保证数组的数据都连续的分布在物理介质上.
拥有随机访问和快速访问的优势,  
快速访问:  CPU读取数据一般是取出一块儿连续的内存空间,  非常适合存取数组结构
但是有需要连续内存的缺点.

链表

链表是一种物理存储单元上非连续、非顺序的线性存储结构, 
通过指针将一组零散的内存块(结点)串联在一起.
组成链表的结点可以在运行时动态生成,  非常适合元素的增, 删操作
但访问查找是线性的,  必须一个结点一个结点的遍历.常结合散列表克服访问的限制

散列表

散列表其实是数组的一种扩展,  用的是数组支持按照下标随机访问数据的特性
可以支持非常高效的数据插入, 删除, 查找操作
但是散列表中的数据都是通过散列函数打乱之后无规律存储的,  
	而且散列表是动态数据结构,  数据一直在改变. 
为了以某种顺序快速地遍历数据,  可以结合散列表与链表(或跳表)

栈和队列

数据结构都是为了某些使用场景建立, 栈和队列的使用场景更加明确
栈是遵循操作顺序先进后出LIFO: last in first out), 
	操作受限(只允许在一端插入或删除)的线性数据结构
    根据实现可以分为, 顺序栈: 数组实现的栈; 链式栈: 链表实现的栈
队列是遵循操作顺序先进先出LIFO: last in first out,
	操作受限(只允许在一端插入;在另一端删除)的线性数据结构
    当某个数据集合在一端插入, 一端删除数据,并且满足先进先出,我们就应该首选“队列”这种数据结构
    队列也可以用数组(顺序队列)和链表(链表队列)实现, 但是出队操作后, 顺序队列的前几位变为空位, 达到队列上限后需要进行数据搬移,最坏时间复杂度变为O(n).为了避免数据搬移操作,就有了循环队列.

内存中的堆栈和数据结构堆栈的区别

内存中的堆栈是真实存在的物理区, 数据结构中的堆栈是抽象的数据存储结构.

内存空间在逻辑上分为三部分: 代码区, 静态数据区和动态数据区, 动态数据区又分为栈区和堆区.
    代码区: 存储方法体的二进制代码.高级调度(作业调度), 中级调度(内存调度), 
        低级调度(进程调度)控制代码区执行代码的切换.
    静态数据区: 存储全局变量, 静态变量, 常量, 常量包括final修饰的常量和String常量.系统自动分配和回收.
    栈区: 存储运行方法的形参, 局部变量, 返回值.由系统自动分配和回收.
    堆区: new一个对象的引用或地址存储在栈区, 指向该对象存储在堆区中的真实数据.

考虑优先级

数据结构和算法的重要性排行榜: 连续空间 > 时间 > 碎片空间

猜你喜欢

转载自blog.csdn.net/sgs595595/article/details/87874164