源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

python双向链表实现实例代码

  • 时间:2021-10-04 09:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python双向链表实现实例代码
示意图: [img]http://files.jb51.net/file_images/article/201311/20131121141652.jpg?20131021142020[/img] [b]python双向链表实现代码[/b]:
[u]复制代码[/u] 代码如下:
#!/usr/bin/python # -*- coding: utf-8 -*- class Node(object):     def __init__(self,val,p=0):         self.data = val         self.next = p         self.prev = p class LinkList(object):     def __init__(self):         self.head = 0     def __getitem__(self, key):         if self.is_empty():             print 'linklist is empty.'             return         elif key <0  or key > self.getlength():             print 'the given key is error'             return         else:             return self.getitem(key)       def __setitem__(self, key, value):         if self.is_empty():             print 'linklist is empty.'             return         elif key <0  or key > self.getlength():             print 'the given key is error'             return         else:             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.next     def getlength(self):         p =  self.head         length = 0         while p!=0:             length+=1             p = p.next         return length     def is_empty(self):         if self.getlength() ==0:             return True         else:             return False     def 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.head         while p.next!=0 and j <index:             p = p.next             j+=1         if j ==index:             return p.data         else:             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.'             return         if 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+=1         if 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.'             return         if 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+=1         if index ==j:             post.next = p.next             p.next.prev = post     def index(self,value):         if self.is_empty():             print 'Linklist is empty.'             return         p = self.head         i = 0         while p.next!=0 and not p.data ==value:             p = p.next             i+=1         if 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 和单链表结果一样。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部