双向链表的基本操作(python)

来源:互联网 发布:北京市水文站数据 编辑:程序博客网 时间:2024/05/16 11:24

用python实现单链表的增删改查

#!/usr/bin/python#coding: utf-8class Node(object):u"数据类"def __init__(self, data, p = 0):self.data = dataself.next = pself.prev = pclass Linklist(object):u"操作类"def __init__(self):self.head = 0def InitList(self, data):"链表的初始化"self.head = Node(data[0])p = self.headfor x in data[1:]:node = Node(x)p.next = nodenode.prev = pp = p.nextdef GetLength(self):u"获取链表的长度"p = self.headlength = 0while p:length += 1p = p.nextreturn lengthdef InsertList(self, index, item):u"在指定索引处插入item"if self.Is_Empty() == True:print u"链表为空!"returnif index <= 0 or index > self.GetLength():print u"插入位置不合法"returnif index == 1:p = Node(item, self.head)self.head = preturnpost = self.headp = self.headnum = 0while num < index - 1:post = pp = p.nextnum += 1if num == index - 1:q = Node(item, p)post.next = qq.prev = postq.next = pp.prev = qdef DeleteList(self, index):u"删除指定索引的元素"if self.Is_Empty() == True:print u"链表为空!"returnif index <= 0 or index > self.GetLength():print u"删除位置不合法"returnpost = self.headp = self.headnum = 0if index == 1:p = self.headself.head = p.nextreturn# while语句运行完以后post指向当前索引的上一个结点# p指向当前索引的结点while num < index - 1:post = pp = p.nextnum += 1if num == index - 1:post.next = p.nextp.next.prev = postdef ChangeList(self, index, item):u"把指定位置的元素修改为item"if self.Is_Empty() == True:print u"链表为空!"returnif index <= 0 or index > self.GetLength():print u"修改位置不合法"returnp = self.headnum = 0while num < index - 1:p = p.nextnum += 1if num == index - 1:p.data = itemdef Get_Index_List(self, index):u"获取指定索引的元素"if self.Is_Empty() == True:return u"链表为空!"if index <= 0 or index > self.GetLength():return u"查找位置不合法"num = 0p = self.headwhile num < index - 1:p = p.nextnum += 1return p.datadef GetList(self):u"获取所有元素"if self.Is_Empty() == True:return "链表为空!"li = []p = self.headwhile p:li.append(p.data)p = p.nextreturn lidef Is_Empty(self):u"判断是否为空"if self.GetLength() == 0:return Trueelse:return Falsedef ClearList(self):u"清空链表"self.head = 0if __name__ == "__main__":print "Linklist", Linklist.__doc__print "Node", Node.__doc__link = Linklist()print "Is_Empty()", link.Is_Empty.__doc__print link.Is_Empty()link.InitList([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])print link.GetLength()print link.GetList()link.DeleteList(1)print link.GetLength()print link.GetList()link.DeleteList(5)print link.GetLength()print link.GetList()link.InsertList(5, 5)print link.GetLength()print link.GetList()link.InsertList(1, 0)print link.GetLength()print link.GetList()link.ChangeList(1, 10)print link.GetList()link.ChangeList(6, 50)print link.GetList()print link.Get_Index_List(6)print link.GetLength()print link.Get_Index_List(20)


0 0