5.顺序表和链表
内存
- 计算机的作用
- 就是用来存储和运算二进制的数据
- 问题:计算机如何计算1+2?
- 变量的概念:就是计算机中的某一块内存空间
- 形象化理解内存(内存的大小和地址)
- 衡量计算机内存大小的范围:
- bit
- byte
- kb
- mb
- 计算机中内存空间都会有两个基本的属性
- 大小
- 地址
- 理解a=10的内存图(引用,指向)
- 指向:如果一个变量存储了某一块内存空间的地址,则表示该变量指向该块内存
- 引用:如果一个变量存储了某一块内存空间的地址,则该变量可以成为该内存的一个引用
s1 = Stu() s2 = s1 s1 = Animal() s2 = s1
- 不同数据占用内存空间的大小
- 整数:4byte
- float:4byte
- double:8byte
- 字符:1byte
顺序表
- 容器中存储的元素是有顺序的,顺序表的结构可以分为两种形式:单数据类型和多数据类型。
- python中的列表和元组就属于多数据类型的顺序表

- 单数据类型顺序表的内存图(内存连续开启)
- 多数据类型顺序表的内存图(内存非连续开辟)
- 顺序表的弊端:顺序表的结构需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁。
链表
相对于顺序表,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理且进行扩充时不需要进行数据搬迁。
- 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是每一个结点(数据存储单元)里存放下一个结点的信息(即地址)
. is_empty():链表是否为空
. length():链表长度
. travel():遍历整个链表
. add(item):链表头部添加元素
. append(item):链表尾部添加元素
. insert(pos, item):指定位置添加元素
. remove(item):删除节点
. search(item):查找节点是否存在
class Node(): def __init__(self,item): self.item = item self.next = None #存储的链表中下一个节点的地址 class Link(): def __init__(self): #_head永远指向None或者第一个节点的地址 self._head = None def add(self,item): node = Node(item) node.next = self._head self._head = node def travel(self): #cur存储的就是第一个节点的地址 cur = self._head while cur: print(cur.item) cur = cur.next def is_Empty(self): return self._head == None def size(self): length = 0 if self._head == None: return length #cur就是指向了第一个节点 cur = self._head while cur: length += 1 cur = cur.next return length def append(self,item): node = Node(item) #如果链表为空则执行如下操作 if self._head == None: self._head = node return cur = self._head pre = None while cur: pre = cur cur = cur.next pre.next = node def search(self,item): ex = False cur = self._head while cur: if cur.item == item: ex = True break cur = cur.next return ex def insert(self,pos,item): node = Node(item) if pos <= 0: self.add(item) return if pos >= self.size(): self.append(item) return cur = self._head pre = None for i in range(0,pos): pre = cur cur = cur.next pre.next = node node.next = cur def remove(self,item): cur = self._head pre = None if cur.item == item: self._head = cur.next return while cur: pre = cur cur = cur.next if cur.item == item: pre.next = cur.next break


浙公网安备 33010602011771号