Python数据结构——链表
2016-10-22 10:47
519 查看
Python中的list是基于array实现的。但无论是list还是array在数据存储和操作层面都有一些缺点。例如在插入和删除元素时都要移动元素,这在数据量旁大时就需要很大开销。array大小是固定的,无法更改;虽然list是可扩展的,但这也是有其代价的。别忘了list是基于array实现的,这就意味着list的每次扩展都要创建更大的array,然后把原来的array拷贝过来。array需要存储在连续的内存单元中,无论这个array多大。所以每次创建array都要划分一块完整的内存出来。如果这个array很庞大,程序动态分配内存就很难甚至不肯能。
链表(linked list)这一数据结构可以解决以上问题。
下面是一个链表的实现
用单向链表实现一个Bag ADT
以下为该模块的使用以及控制台的输出
控制台输出
链表(linked list)这一数据结构可以解决以上问题。
下面是一个链表的实现
用单向链表实现一个Bag ADT
class Bag: #构造一个空bag def __init__(self): self._head = None self._size = 0 # 返回bag大小 def __len__(self): return self._size # 查看元素是否在bag中 def __contains__(self, target): curNode = self._head while curNode is not None and curNode.item != target: curNode = curNode.next return curNode is not None # 添加一个新元素到bag def add(self, item): newNode = _BagListNode(item) newNode.next = self._head self._head = newNode self._size += 1 # 从bag中移除一个元素 def remove(self, item): predNode = None curNode = self._head while curNode is not None and curNode.item != item: predNode = curNode curNode = curNode.next assert curNode is not None, "元素必须存在于bag中" #断开连接返回元素 self._size -= 1 if curNode is self._head : self._head = curNode.next else : predNode.next = curNode.next return curNode.item def __iter__(self): return _BagIterator(self._head) #为创建链表节点定义一个私有存储类 class _BagListNode(object): def __init__(self, item): self.item = item self.next = None #使用链表实现的一个迭代器 class _BagIterator : def __init__(self, listHead): self._curNode = listHead def __iter__(self): return self def next(self): if self._curNode is None: raise StopIteration else: item = self._curNode.item self._curNode = self._curNode.next
以下为该模块的使用以及控制台的输出
bag = Bag() bag.add(10) bag.add("china") bag.add(45) print(len(bag)) print(45 in bag) print(len(bag)) bag.remove(10) print(len(bag))
控制台输出
相关文章推荐
- Python数据结构——链表的实现
- python数据结构与算法——链表
- Python数据结构学习之旋转链表详解
- Python数据结构--单链表
- python数据结构之链表的实例讲解
- 数据结构和算法 python(1)链表 list
- 数据结构与算法python版(一)--单链表
- python数据结构之链表
- python数据结构学习笔记-2016-11-26-01-链表排序
- python数据结构之链表详解
- 用Python学习数据结构2--链表
- python数据结构学习笔记-4-链表
- python数据结构学习笔记-2016-10-27-01-链表
- 用Python实现的数据结构与算法:链表
- python数据结构学习笔记-2016-11-07-01-双链表
- [笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列
- [从头学数学] 第246节 Python实现数据结构:链表
- python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
- 数据结构 两个链表合并-python
- 基础数据结构:顺序表、链表——Python实现