zoukankan      html  css  js  c++  java
  • python——python 数据结构之双向链表的实现

    和单链表类似,只不过是增加了一个指向前面一个元素的指针而已。

    示意图:

    python 实现代码:

    #Personal Python Data Structure--PPDS
    #
    #!/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 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):
            length = 0
            p =  self.head
            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
            j = 0        
            p = self.head
            post  = self.head
            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
            j = 0        
            p = self.head
            post  = self.head
            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
            i = 0
            p = self.head
            while p.next != 0 and not p.data == value:
                p = p.next
                i+=1
            if p.data == value:
                return i
            else:
                return -1
    
    if __name__ == '__main__':
        l=LinkList()
        llist=[7,3,10,4,5,]
        l.initlist(llist)
    
        print(l.getlength())
        print(l.is_empty())
    
        # l.append(11)
        # l.insert(2,100)
    
        print(l.getlength())
        print(l.getitem(0))
        for i in range(l.getlength()):
            print(l.index(llist[i]))
        l.clear()
        print(l.getlength())
  • 相关阅读:
    极简代码搞定视频剪辑
    python 遍历本地文件
    安装Anaconda需要知道的pc信息
    ng4 路由多参数传参以及接收
    Js之设置日期时间 判断日期是否在范围内
    VsCode显示左边折叠代码+-按钮
    H5+.Net Webapi集成微信分享前后端代码 微信JS-SDK wx.onMenuShareTimeline wx.onMenuShareAppMessage
    压测工具之JMeter之环境配置及运行
    C# 交集、差集、并集、去重
    Nginx初学者指南
  • 原文地址:https://www.cnblogs.com/Simon-xm/p/4168817.html
Copyright © 2011-2022 走看看