数组和链表
①链表:
链表中的元素可以存储在内存的任何地方,每个元素都存储了下一个元素的地址,使内存地址串在一起。使用链表时,不需要移动元素,在插入元素方面有优势。
需要读取链表最后一个元素时,不能直接读取,必须先访问#1从而获取#2的地址,直到访问最后一个元素,在需要读取所有元素的时候,链表的效率很高,但如果要跳跃,效率很低。
②数组:
使用数组意味着所有代办事项在内存中都是相连的,缺点:额外请求的位置可能根本用不上,浪费内存。但需要随机读取元素时,数组的效率很高,因为可以迅速找到数组的任何元素。
运行时间
①链表读取O(n),插入O(1),删除O(1)
②数组读取与插入和链表相反,删除O(n)
在中间插入
①使用链表时,插入元素很简单,只要它前面的那个元素指向的地址,而使用数组,所有的元素都要向后移。链表最好。
删除
①链表更好,因为只需要修改前一个元素指向的地址,而使用数组,删除元素后,后面的元素必须向前移。
②删除总能成功,插入若内存无足够的空间,会失败。
使用多的是什么
①数组更多,因为支持随机访问。有两种访问方式:随机访问和顺序访问。
顺序意味着从1-n逐个读取,链表只顺序访问。
找出数组中最小元素
def finsmallest(a):
smallest=a[0]
smallest_index=0
for i in range(1, len(a)):
if a[i]<smallest:
smallest=a[i]
smallest_index=i
return smallest_index
def selectionsort(arr):
newarr=[]
for i in range(len(arr)):
smallest=finsmallest(arr)
newarr.append(arr.pop(smallest))
return newarr
print(selectionsort([5,3,2,1,4]))
小结
①计算机内存如抽屉
②需要存储多个元素,使用数组或者链表
③数组的元素都在一起
④链表的元素是分开的,其中每个元素都存储了下一个元素的地址
⑤数组的读取速度更快
⑥链表的插入和删除速度很快
⑦在同一个数组中,所有元素类型必须相同