python双向链表实现实例代码
示意图:
python双向链表实现代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-class Node(object):
def __init__(self,val,p=0):
self.data = val
self.next = p
self.prev = pclass LinkList(object):
def __init__(self):
self.head = 0def __getitem__(self, key):
if self.is_empty():
print 'linklist is empty.'
returnelif key <0 or key > self.getlength():
print 'the given key is error'
returnelse:
return self.getitem(key)
def __setitem__(self, key, value):
if self.is_empty():
print 'linklist is empty.'
returnelif key <0 or key > self.getlength():
print 'the given key is error'
returnelse:
self.delete(key)
return self.insert(key)def initlist(self,data):
self.head = Node(data[0])
p = self.head
for i in data[1:]:
node = Node(i)
p.next = node
node.prev = p
p = p.nextdef getlength(self):
p = self.head
length = 0
while p!=0:
length+=1
p = p.nextreturn length
def is_empty(self):
if self.getlength() ==0:
return True
else:
return Falsedef clear(self):
self.head = 0
def append(self,item):q = Node(item)
if self.head ==0:
self.head = q
else:
p = self.head
while p.next!=0:
p = p.next
p.next = q
q.prev = p
def getitem(self,index):if self.is_empty():
print 'Linklist is empty.'
return
j = 0
p = self.headwhile p.next!=0 and j <index:
p = p.next
j+=1if j ==index:
return p.dataelse:
print 'target is not exist!'
def insert(self,index,item):
if self.is_empty() or index<0 or index >self.getlength():
print 'Linklist is empty.'
returnif index ==0:
q = Node(item,self.head)self.head = q
p = self.head
post = self.head
j = 0
while p.next!=0 and j<index:
post = p
p = p.next
j+=1if index ==j:
q = Node(item,p)
post.next = q
q.prev = post
q.next = p
p.prev = q
def delete(self,index):if self.is_empty() or index<0 or index >self.getlength():
print 'Linklist is empty.'
returnif index ==0:
q = Node(item,self.head)self.head = q
p = self.head
post = self.head
j = 0
while p.next!=0 and j<index:
post = p
p = p.next
j+=1if index ==j:
post.next = p.next
p.next.prev = postdef index(self,value):
if self.is_empty():
print 'Linklist is empty.'
returnp = self.head
i = 0
while p.next!=0 and not p.data ==value:
p = p.next
i+=1if p.data == value:
return i
else:
return -1
l = LinkList()
l.initlist([1,2,3,4,5])
print l.getitem(4)
l.append(6)
print l.getitem(5)l.insert(4,40)
print l.getitem(3)
print l.getitem(4)
print l.getitem(5)l.delete(5)
print l.getitem(5)l.index(5)
结果为;
5
6
4
40
5
6
和单链表结果一样。
您可能感兴趣的文章:
- C语言双向链表实现根据使用频率安排元素位置的功能实例代码
- Python 实现链表实例代码
- C语言双向链表的表示与实现实例详解
- redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐
- Python实现高效求解素数代码实例
- 双向链表代码实例
- 基于Python实现的扫雷游戏实例代码
- python实现的udp协议Server和Client代码实例
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- python实现双向链表
- Python实现端口复用实例代码
- java 实现单链表逆转详解及实例代码
- 双向链表代码实现-C语言
- C语言之双向链表详解及实例代码
- C++ 构造双向链表的实现代码
- Python实现多线程下载文件的代码实例
- python双向链表实现实例代码
- Python二叉搜索树与双向链表转换实现方法
- Python实现端口复用实例代码
- python——python 数据结构之双向链表的实现