zoukankan      html  css  js  c++  java
  • python 数据结构与算法 day02 双向链表

    1.实现双向链表

    #_+_coding:utf-8_*_
    #author:    xuanxuan
    #Time :     2018/11/7  8:48
    
    class Node():
        def __init__(self,item):
            self.item=item
            self.prev=None  # 前驱结点
            self.next=None  # 后继结点
    
    class DoubleLinkList(object):
        def __init__(self,node=None):
            self.__head=node
    
        def is_empty(self):
            """判断双向链表是否为空"""
            if self.__head is None:
                return True
            return False
    
        def length(self):
            """求双向链表的长度"""
            count=0
            cur=self.__head
            while cur is not None:
                count+=1
                cur = cur.next
            return count
    
        def travel(self):
            """实现双向链表的遍历"""
            cur=self.__head
            while cur is not None:
                print(cur.item,end=" ")
                cur=cur.next
            print("")
    
        def add(self,item):
            """在双向链表的头部添加结点(元素)"""
            node=Node(item)
            if self.__head is None:  # 双向链表为空
                self.__head=node
            else:
                node.next=self.__head
                self.__head.prev=node
                self.__head=node
    
        def append(self,item):
            """在双向链表的尾部追加结点(元素)"""
            node=Node(item)
            if self.__head is None: # 双向链表为空
                self.__head=node
            else:
                cur=self.__head
                while cur.next is not None:
                    cur=cur.next
                node.prev=cur
                cur.next=node
    
        def insert(self,pos,item):
            """在双向链表的任意位置插入结点(元素)"""
            node=Node(item)
            if pos<=0:
                self.add(item)
            elif pos>=self.length():
                self.append(item)
            else:
                count=0
                cur=self.__head
                while count<pos:
                    cur=cur.next
                    count+=1
                node.next=cur
                node.prev=cur.prev
                cur.prev=node
                node.prev.next=node
        def remove(self,item):
            """从双向链表中删除一个元素"""
            if self.search(item):
                cur=self.__head
                if self.__head.item==item:
                    self.__head=self.__head.next
                    if self.__head.next: # 只有一个结点,删除第一个结点
                        self.__head.next.prev=None
                else:
                    while cur is not None:
                        if cur.next is None:  # 删除最后一个结点
                            cur.prev.next=None
                            break
                        if cur.item==item:
                            cur.prev.next=cur.next
                            cur.next.prev = cur
                            break
                        else:
                            cur=cur.next
    
    
    
    
        def search(self,item):
            """判断双向链表中是否存在该元素"""
            cur=self.__head
            while cur is not None:
                if cur.item==item:
                    return True
                cur=cur.next
            return False
    
    
    if __name__=="__main__":
        dll=DoubleLinkList()
        print(dll.is_empty())
        dll.append(1)
        dll.append(2)
        dll.append(3)
        dll.append(4)
        dll.add(0)
        print(dll.length())
        dll.travel()
        dll.insert(0,1000)
        dll.insert(5,200)
        dll.travel()
        dll.remove(200)
        dll.remove(1000)
        dll.travel()

    运行结果:

    talk is cheap,show me the code
  • 相关阅读:
    tf-idf 解释
    maven 下载依赖失败
    eclipse 快捷键
    线程数 QPS
    resin conf
    静态成员 生命周期
    SuperMap 9D 实时数据服务学习笔记
    SuperMap iServer 在Linux 部署中问题总结
    在SuperMap iDesktop中如何快速追加记录行?
    Landsat8 卫星数据下载
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9924668.html
Copyright © 2011-2022 走看看