数据结构与算法学习(2)

数据结构=线性(基本数据结构+逻辑数据结构)+非线性(二维数组, 多维数组, 广义表, 树结构, 图结构)

本篇主要总结线性数据结构

基本数据结构:顺序存储结构(数组)、链式存储结构(链表)

数组:由有限个相同类型的变量所组成的有序集合
特点:查询快,增删慢
长度固定,不会自动扩容
数组的扩容其实是对数组的复制

链表:由若干节点组成, 每个节点包含指向下一节点的指针
特点:查询慢,增删快
链表的第一个节点为头节点,最后一个节点是尾节点。
每一个节点由两部分组成,分别为存放数据的内存和指向下一个节点的指针。
尾节点指针为null。

查询资料看到的图解,感觉便于理解。
单链表图解
单链表
双向链表图解
双向链表

数组,链表增删改查的时间复杂度对比
数组,链表增删改查的时间复杂度对比

逻辑数据结构:栈、队列、散列表(hash表)(逻辑数据结构都可以由基本数据结构实现)

栈: 栈将允许进行插入、删除的一端称为栈顶,另一端称为栈底。
特点:先进后出
既可以由数组实现,也可以由链表实现
操作:入栈、出栈

栈的实现

队列:队列(Queue)是一种先进先出的抽象的数据结构。对应我们日常生活中常见的是排队买票、排查吃饭等。
特点:先进先出
既可以由数组实现,也可以由链表实现
操作:入队、出队

队列的实现

散列表:hash表(key-value)的数据关系【哈希函数中,哈希值涉及位运算优化性能,优于取模计算】
操作:读、写
散列表在写操作时,会产生哈希冲突
解决方法:开放寻址法(threadlocal此处不做过多总结)、链表法(hashmap底层【Java7、8有不同的底层优化,7采用数组+链表,8采用数组+链表+红黑树】此处不做过多总结)
哈希表扩容:1、数组扩容 2、重新hash
拥挤的哈希表扩容后变得稀疏

posted @ 2021-02-04 11:13  明月0606  阅读(52)  评论(0编辑  收藏  举报