什么是数组
(资料图片)
数组(Array): 有限个相同类型的变量所组成的有序集合,数组中的每一个变量称为元素。
数组在内存中顺序存储。
Python中使用列表(list)和元组(tuple)这两种集合,本质上是对数组的封装;
列表是一个动态可扩展的数组,支持任意的增、删、改;
元组是一个不可变集合,一旦创建就不再支持修改
数组的优势与劣势:
数组拥有非常高效的随机访问能力,只要给出下标,就可以用常量时间找到对应元素。运用该优势的算法:二分查找
插入、删除元素都会导致大量元素被迫移动,影响效率
数组适合的是读操作多、写操作少的场景
什么是链表
链表(linked list)是一种物理上非连续、非顺序的数据结构,由若干节点(node)所组成。
单向链表中每个节点包含两部分,一是存放数据变量的data,另一个部分是指向下一个节点的指针next。
双向链表:每个节点除了拥有data和next指针,还拥有指向前置节点的prev指针。
数组的存储方式:顺序存储
链表的存储方式:随机存储
数组的优势在于能够快速定位元素,对于读操作多、写操作少的场景来说,用数组更合适一些;
链表的优势在于能够灵活地进行插入和删除操作,如果需要频繁插入、删除元素,用链表更合适一些
栈和队列
栈(stack)是一种线性数据结构,栈中的元素只能先入后出(First In Last Out, FILO);
最早进入元素存放的位置叫做栈底(bottom),最后进入的元素存放的位置叫做栈顶(top);
栈可用数组或者链表来实现
栈的基本操作包括 入栈(push)和出栈(pop)
入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶。
Python语言中,列表实现了栈的功能,append(element)相当于入栈,pop(element)相当于出栈
队列(queue)是一种线性数据结构,队列中的元素只能先入先出(First In First Out,FIFO);
队列的入口端叫做队尾,队列的出口端叫做队头;
队列可以用数组或者链表来实现
队列的基本操作:入队(enqueue)和出队(dequeue)
入队: 在队尾的位置放入元素,新元素的下一个位置将会成为新的队尾
出队: 只允许在队头一侧移出元素,出队元素的后一个元素将会成为新的队头
循环队列:假设一个队列经过反复的入队和出队操作,还剩下2个元素,在“物理”上分布于数组的末尾位置。这时又有一个新元素将要入队。在数组不做扩容的前提下,我们可以利用已出队元素留下的空间,让队尾指针重新指回数组的首位。这样一来,整个队列的元素就“循环”起来了。
在Python中,表示队列的工具由collections.deque、queue.Queue等
栈的应用:
实现递归的逻辑
面包屑导航
队列的应用:
在多线程中,争夺公平锁的等待队列
网络爬虫实现网站抓取
双端队列:
双端队列可以从队头一端可以入队或出队,也可以从队尾一端也可以入队或出队。
优先队列:
谁的优先级最高,谁先出队,优先队列已经不属于线性数据结构的范畴了,它是基于二叉堆来实现的。
神奇的哈希表
哈希表(hash table):散列表,提供键(Key)-值(Value)的映射关系,给出key,就可以高效地找到所匹配的Value
哈希表在本质上也是一个数组,数组根据下标,像a[0]、a[1]、a[2]、a[3]、a[4]这样来访
问,而哈希表则以字符串类型的Key为下标进行访问
Python中,哈希表对应的集合为字典(dict)
在Python及大多数面向对象的语言中,每一个对象都有属于自己的hash值,这个hash值是区分不同对象的重要标识。无论对象自身的类型是什么,它们的hash值都是一个整型变量
Python中的哈希函数利用了位运算的方式来优化性能
通过哈希函数,可以把字符串或其他类型的Key,转化成数组的下标index
哈希表的写操作(put):
写操作就是在哈希表中插入新的键值对(Entry)
哈希冲突: 由于数组的长度是有限的,当插入的Entry越来越多时,不同的Key通过哈希函数获得的下标有可能是相同的
解决哈希冲突的方法主要有两种,一种是开放寻址法,一种是链表法
开放寻址法: 当一个Key通过哈希函数获得对应的数组下标已被占用时,我们可以寻找下一个空当位置
链表法: 哈希表数组的每一个元素不仅是一个Entry对象,还是一个链表的头节点。每一个Entry对象通过next指针指向它的下一个Entry节点。当新来的Entry映射到与之冲突的数组位置时,只需要插入对应的链表中即可。
哈希表读操作(get):通过给定的Key,在哈希表中查找对应的Value。
在众多编程语言中,有些语言的哈希表采用了链表法,最具代表性的就是
Java中的HashMap;
有些编程语言采用的是开放寻址法,比如Python中的dict。
有兴趣的读者可以看一下Python官方解释器(CPython)中,关于PyDictObject的C语言源码实现。
哈希表可以说是数组和链表的结合,它在算法中的应用很普遍,是一种非常重要的数据结构。
小结
什么是数组?
数组是由有限个相同类型的变量所组成的有序集合,它的物理存储方式是顺序存储,访问方式是随机访问。利用下标查找数组元素的时间复杂度是O(1),中间插入、删除数组元素的时间复杂度是O(n)
什么是链表?
链表是一种链式数据结构,由若干节点组成,每个节点包含指向下一节点的指针。链表的物理存储方式是随机存储,访问方式是顺序访问。查找链表节点的时间复杂度是O(n), 中间插入、删除节点的时间复杂度是O(1)
什么是栈?
栈是一种线性逻辑结构,可以用数组实现,也可以用链表实现;
栈包含入栈和出栈操作,遵循先入后出的原则(FILO)
什么是队列?
队列是一种线性逻辑结构,可以用数组实现,也可以用链表实现;
队列包含入队和出队的操作,遵循先入先出的原则(FIFO)
什么是哈希表?哈希表也叫做散列表,是存储Key-Value映射的集合;
对于某一个Key,哈希表可以在接近O(1)的时间内进行读写操作;
哈希表通过哈希函数实现Key和数组下表的转换,通过开放寻址法和链表法来解决哈希冲突
标签:
-
今日播报!《漫画算法:小灰的算法之旅》第2章 数据结构基础
什么是数组数组(Array):有限个相同类型的变量所组成的有序集合,数组中的每一个变量称为元素。数组在内存中顺序存储。Python中使用列表(list)
-
环球新动态:物联网龙头ETF: 南方基金管理股份有限公司关于旗下基金投资关联方承销证券的关联交易公告
物联网龙头ETF:南方基金管理股份有限公司关于旗下基金投资关联方承销证券的关联交易公告
-
古代的“诰命夫人”是什么意思?具体有什么作用?-每日热议
如下解答:很多影视作品中,都会有一些贵胄重臣的女眷受到朝廷的册封,被称作“诰命夫人”,一般是朝臣或者妃嫔的家人。汉朝以后,开始对于...
-
赛伦生物(688163.SH):拟使用最高不超7亿元闲置募集资金进行现金管理 热头条
格隆汇3月22日丨赛伦生物(688163 SH)公布,公司第三届董事会第十一次会议和第三届监事会第八次会议分别审议通过了《关于使用部分暂时闲置募集
-
澳弘电子:2022年归母净利润同比减6.76%,拟10派3元,目前累计开发10多家新客户 天天微动态
澳弘电子3月22日公告,2022年公司营业收入11 26亿元,同比增长5 18%;归母净利润1 33亿元,同比减少6 76%;基本每股收益0 93元。公司拟向全体
-
“3亿国人存在睡眠障碍”应视为公共问题-新视野
3月21日是第23个世界睡眠日,有关睡眠的多份报告引发关注。《2021都市打工人睡眠报告》显示,最能熬夜的城市包括北京、上海、深圳及广州。《20
-
刻奇通俗解释_刻奇|天天视讯
1、刻奇是指一种被认为低俗的艺术风格,是高雅艺术的反面。2、用于形容一种视觉艺术风格。3、大量使用流行元素产出的艺术或设
-
哈医大二院完成黑龙江省首例“11CPIB、11CCFT成像技术”诊断神经变性病
中新网黑龙江新闻3月22日电(田为方若冰刘丽丽)近日,哈医大二院PET CT中心完成黑龙江省首例“11C-PIB、1
-
英特尔晶圆代工服务新负责人确定
当地时间3月21日,英特尔公司宣布,任命StuartPann为英特尔商业代工业务——英特尔晶圆代工服务(IFS)的高级副
-
医脉通(02192.HK):3月21日南向资金减持21.05万股
3月21日北向资金减持21 05万股医脉通(02192 HK)。近5个交易日中,获南向资金减持的有3天,累计净减持52 6万股。近20个交易日中,获南向资金
-
全球报道:这都满意?李楠:末节对辽宁全场压迫防守不适应 但对过程比较满意
今日进行的CBA常规赛,江苏队客场77-105不敌辽宁队。
-
90后创业开24小时宠物店,深夜为“铲屎官”救急
90后创业开24小时宠物店,深夜为“铲屎官”救急
-
世界快消息!红相股份:截至目前,公司子公司星波通信与特殊机构客户签署的重大合同金额为8.94亿元,合同正常履行中
同花顺金融研究中心3月21日讯,有投资者向红相股份提问,你好,请问一下公司军工订单的履行情况,公司是否有集成电路相关业务,是否享有政府补
-
短视频开发,如何正确的使用前后端分离?-当前速看
短视频开发方式往往会影响其开发质量和开发效率,选择合适的开发方式可达到事半功倍的效果。在短视频开发中,前后端分离是一种比较受欢迎的开
-
什么叫隔夜水_隔夜水是什么 热门看点
1、隔夜水是指当天烧开,第二天再放上的水。水是由氢和氧组成的无机物,无毒。2、水在常温常压下是无色无味的透明液体,被称为
-
3月21日河南地区粗苯市场价格下调
河南地区加工用粗苯价格,报价区间集中在5800-5950元 吨,较上期招标价格下调150元 吨。本周拍卖价格整体下行较多。综合来看目前原油表现偏弱
-
喆与哪些字搭配寓意好_喆是什么意思 焦点精选
1、①木炭和一氧化碳都具有可燃性、还原性,都能与氧气、氧化铜反应,如碳和氧气在点燃条件下生成二氧化碳。2、反应的化学方程
-
林皋村二队_关于林皋村二队简述
1、林皋村二队是宁夏回族自治区的地名,清同治年间(公元1862-1874年)张姓族人建庄筑土寨以己姓取名张家寨子。2、1961年为林皋大队二队。文章
-
有没有欧博信这个手机厂家_欧博信智能手机怎么样
1、这种手机一般都是配置高质量却一般。本文分享完毕,希望对大家有所帮助。
-
被曝多项组织架构调整,比亚迪:对第三方爆料消息不予置评
日前,有消息称,比亚迪(SZ002594,股价235 57元,市值6172 85亿元)今年以来最大的组织变化,就是推行汽车品牌独立运营。调整首先从比亚迪的
-
消息称苹果将推迟发布首款带屏幕HomePod,可将预算分配给MR头显等项目
App3月20日消息,知名苹果爆料记者MarkGurman指出,苹果首款带屏幕的HomePod音箱项目已被推迟到明年或更晚,这是该公司为了降低成本和提高效率
-
@在泰缅籍工人!涨价了,在泰国办理新护照涨价了
缅甸驻泰国大使馆发文称,在泰国缅籍人员要办理新护照的话,将需要1250泰铢的办理费用。据悉,以前,在泰国缅籍工人办理新护照的话,仅需要800
-
圈里有话说 | Jennie 演绎CK 23春季广告大片
快来看看本周时尚圈又提出了哪些新品吧!CalvinKlein推出2023春季广告大片01 CalvinKleinJeans&CalvinKleinUnderwearCalvinKlein23年春
-
城镇居民医疗保险报销范围2023是怎样的
一、城镇居民基本医疗保险的报销范围参保人员在定点医疗机构、定点零售药店发生的下列项目费用纳入城镇居民基本医疗保险基金报销范围:(一)
-
制造强省丨持续推动中小企业品牌能力提升 百企入选今年“湖湘精品”试点
为打造更多“记得住、叫得响、走得出”的湖南品牌,省工信厅近日发布2023年度“湖湘精品”中小企业品牌能力提升试点企业名单
-
基于M-Terrain概念车打造,猛士917将亮相上海车展
基于M-Terrain概念车打造,猛士917将亮相上海车展
-
realmex2pro支持5g wifi吗
00-1010realmex2pro新增了全新的双WiFi网络加速技术,可以同时连接2 4GHz和5GHz不同频
-
空降任务 豆瓣_空降任务 环球观热点
空降任务豆瓣,空降任务这个很多人还不知道,现在让我们一起来看看吧!1、第505团计划在梅特勒河东岸空降,任务是夺取多曼
-
世界快播:福建一退休干部组织百名女子卖淫 曾经当过什么干部?
陈某德是一名退休干部,却伙同他人入股“翠竹桑拿”,组织招募100余名妇女从事卖淫活动,组织卖淫达19333人次。近日,被
-
每日热门:祖冲之把圆周率算到第几位_祖冲之推算圆周率比欧洲早多少年
今天小编肥嘟来为大家解答以上的问题。祖冲之把圆周率算到第几位,祖冲之推算圆周率比欧洲早多少年相信很多小伙伴还不知道,现在让我们一起来看