首页 > 编程语言 > 详细

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

时间:2021-02-04 12:23:06      阅读:21      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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

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

数组,链表增删改查的时间复杂度对比
技术分享图片

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

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

技术分享图片

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

技术分享图片

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

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

原文:https://www.cnblogs.com/zwc0203/p/14368019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!