链表与数组的区别:
可以根据索引访问数组元素,链表不行,链表需要沿着链表逐个移动才可以达到要访问的节点;
数组在插入和删除数据时需要在内存中移动数据项,链表不需要;
每一次插入和删除过程,链表结构会调整大小,并且不需要额外的内存代价;
数组项的逻辑顺序和内存中物理单元顺序是耦合的,链表结构的项的逻辑顺序和内存的顺序是解耦的。
思考;
链表上的数据排序?
底层内存如何支持链表插入和删除数据时不移动数据项的?
#! /usr/bin/env python
# _*_ coding: utf-8 _*_
class Node(object):
"""Represnet a single linked node"""
def __init__(self, data, next=None):
"""Instantiates a Node with a default next of Node"""
self.data = data
self.next = next
if __name__ == "__main__":
lyst = list(range(6,1,-1))
print(lyst)
head = None
for count in range(5):
# print(lyst[count])
head = Node(lyst[count],head)
"""
[6,5,4,3,2]
插入顺序:
[6][\]
[5][->][6][\]
[4][->][5][->][6][\]
[3][->][4][->][5][->][6][\]
[2][->][3][->][4][->][5][->][6][\]
"""
"""
打印时以插入相反顺序打印
2
3
4
5
6
"""
while head != None:
print(head.data)
head = head.next
"""
保持打印顺序不变,应该从2到6顺序插入
"""
head = None
lyst = list(range(6,1,-1))
for count in range(6):
# 先插入最后一个元素2,那么插入完成后最后2也在结构的最后一位
head = Node(lyst[len(lyst) - 1 - count], head)
while head != None:
print(head.data)
head = head.next
指针head生成了链表结构。链表插入时实际上是从右向左插入,数据的读取是从左向右完成的。(这个是怎么实现的?)
链表最近插入的项总是在结构的开始处;
因此显示数据的时候,它们按照和插入时相反的顺序出现。