点击蓝字“莫名Coder”关注我哟
加个“星标★”,每日良时,好文必达!
内存的工作原理
生活中,我们去超市之前需要存储自己东西,那么就需要存储柜。每个存储柜可放一个东西,你有两样东西要寄存,因此需要两个存储柜。寄存完毕之后,你可以愉快的购物了,这大概就是计算机内存的工作原理。计算机就是许多存储柜的集合,每个抽屉都有地址。
feeb就是一个内存单元的地址,计算机给你一个存储地址,需要存储数据,有两种方式---数组和链表。
数组和链表
数组和链表并非试用所有的情形,因此需要知道它们的差别很重要,接下来一起了解一下它们的优缺点。
链表
链表中的额元素可以存储内存中的任何地方。
链表中的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。这就是一个寻宝游戏,你前往第一个地址,那么有一个纸条告诉你下一个地址,以此内推。
使用链表时,根本不需要移动元素,假如说想去看演唱会,六个人坐一起,那么座位没有在一起,使用数组则是无法实现,那么这个时候只要是系统有足够的内存,则可以使用链表。链表的优势在于插入元素方面。
数组
假设一个数组有五个元素,第一个元素的地址为00,那么第五个是多少?
显而易见,当然是05.需要随机读取元素时,数组的效率很高,因为可以快速找到其它数组的任何元素。链表中元素并非靠在一起,无法准确的计算第五个元素的内存地址。
插入元素和删除元素
插入元素
在餐厅点菜,需要中间插入数据,那么怎么处理?使用链表时,插入元素很简单,只需要修改它前面元素指向的地址。而使用数组的时候,则必须将后面的元素向后移。如果没有足够的空间,那么还要将数组复制到其它地方,在进行插入元素。因此链表插入元素是更好的选择。
删除元素
删除元素,链表也是最好的选择,只需要修改前一个元素的内存指向的地址即可。而使用数组时,删除元素后,必须将后面的元素前移。
不同于插入,删除元素总可以成功。如果内存中没有足够的空间,插入操作可能失败。但是任何情况下都可以删除元素。
数组和链表那个用的更多?
数组用的更多,它支持随机访问,有两种方式:随机访问和顺序访问。顺序访问则是从一个读取到最后一个元素,链表只可以顺序访问。
选择排序
有了前面的认识,我们可以学习选择排序了,假设计算机中存了很多音乐,对于每首音乐,都记录了播放次数。我们要将列表按照播放次数从多到少的排序,从而将你喜欢的音乐排序。如何操作?
要找出播放次数最多的音乐,必须检查每个元素,需要时间为O(n),然后需要执行n次,需要的总时间就是O(n*n)。
示例代码:
def find_smal(list):
smal = list[0] # 存储最小的值
smal_index = 0 # 存储最小元素的索引
for i in range(1, len(list)):
if list[i] < smal:
smal = list[i]
smal_index = i
return smal_index
def select_sort(list):
new_list = []
for i in range(len(list)):
smal = find_smal(list)
new_list.append(list.pop(smal))
rerurn new_list
my_list = [11, 3, 5, 2, 88, 1, 0, 55, 22]
print(select_sort(my_list))
注意
计算机中内存就相当于存储柜
存储多个元素时可以使用数组和链表
数组的元素都在一起,链表的元素分开的,其中每个元素存储了下一个元素的地址
数组的读取速度比较快,链表的插入和删除很快
在同一个数组中,所有的元素类型必须相同(都为int等等)
球分享
球点赞
球在看