单链表的Python实现
来源:互联网 发布:矩阵通解 编辑:程序博客网 时间:2024/04/30 04:07
今天写了一个用Python实现单链表,基本功能包括:从头插入,从尾插入,查找,删除,构造有限队列的插入等功能。
# -*- coding: utf-8 -* ##允许中文注释'''单向链表的Python实现L = LinkList()L.addToHead ##从头节点加入数据L.addToTail ##从尾节点加入数据L.findTail ##返回尾节点L.findSize ##返回链表大小L.delete(data) ##删除指定节点L.search(index) ##返回指定index的节点L.clear() ##清空链表author: diudiu'''class Node(): def __init__(self, data = None, next = None): self.data = data self.next = next def __str__(self): return 'Node [' + str(self.data) + ']'class LinkList(): def __init__(self): self.head = None #self.tail = None #也可以设置一个tail,这样就不需要调用findTail()函数去找尾巴了 self.size = 0 def __str__(self): newNode = self.head s = '' while newNode: s += str(newNode.data) if newNode.next: s += ',' newNode = newNode.next return s def addToHead(self, data): newNode = Node(data, None) if self.head == None: self.head = newNode else: newNode.next = self.head self.head = newNode self.size += 1 def addToTail(self, data): newNode = Node(data, None) if self.head == None: self.head = newNode else: tail = self.findTail() tail.next = newNode self.size += 1 def findTail(self): curNode = self.head ##currentNode = self.head while curNode.next: curNode = curNode.next return curNode def findSize(self): return self.size def delete(self, data): if self.size == 0: print "Can not delete from an empty list" return curNode = self.head preNode = None while curNode: if curNode.data == data: break else: preNode = curNode curNode = curNode.next if curNode == self.head: self.head = self.head.next elif curNode == None: print 'Cant find the data you want delete' else: preNode.next = curNode.next curNode = None self.size -= 1 def insert(self, data):##将构造一个有限队列 newNode = Node(data, None) if self.size == 0: self.head = newNode else: curNode = self.head preNode = None while curNode: if curNode.data >= data: break else: preNode = curNode curNode = curNode.next if curNode == self.head: newNode.next = self.head self.head = newNode else: newNode.next = curNode preNode.next = newNode self.size += 1 pass def search(self, index): if self.size == 0: print "the list is empty" return if index > self.size: print "the index is out of boundary" return curNode = self.head cnt = 1 while curNode: if cnt == index: return curNode cnt += 1 curNode = curNode.next def clear(self): self.__init__()def test(): L = LinkList() while 1: data = raw_input('input data, input "q" to stop: ') if data == 'q': break L.insert(data) print L index = raw_input('input the index:') print L.search(int(index)) while 1: data = raw_input('delete data, input "q" to stop: ') if data == 'q': break L.delete(data) print L if __name__ == "__main__": test()
0 0
- 单链表的Python实现
- 单链表的实现(python)
- python实现单链表的翻转
- Python-数据结构之单链表的实现
- Python 实现一个全面的单链表
- python 数据结构之单链表的实现
- Python 实现的HillCipher
- python switch的实现
- python的实现版本
- Python的switch实现
- python list的实现
- python中闭包的实现
- python分页的实现
- PLSA的Python实现
- python的switch实现
- python 的入口实现
- SVM的python实现
- SOFTMAX 的python实现
- 常用正则表达式大全!(例如:匹配中文、匹配html)
- GetParent与GetOwner的区别
- About PCA
- 第13周项目 4 冒泡输出
- 关于高仿微信对话列表滑动删除效果代码优化
- 单链表的Python实现
- 条款19 了解临时对象的来源
- 批量删除和复选框
- 女白领职场必看的15个忠告
- EQU
- 弹出层插件的编写-layer(跨iframe传值回调)
- 第七届中国R语言会议杭州会场开场致辞(阿里巴巴数据技术与产品部负责人闵万里)
- MFMessageComposeViewController 短信发送
- Android Intent 序列化和反序列化