会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 128428个问题
Python 全系列/第十六阶段:数据结构与算法/数据结构与算法 2楼
Python 全系列/第十六阶段:数据结构与算法/数据结构与算法 3楼

class LinkNode:

    def __init__(self,val:int) :

        self.val:int=val

        self.pre=None

        self.next=None

   

class Double_Queue_Linklist:

    def __init__(self) :

        self.head=LinkNode(0)

        self.tail=LinkNode(0)

        self.head.next=self.tail

        self.tail.pre=self.head

        self.size=0

       

    def push_first(self,val:int)->None:

        #从队首入队

        add_Node=LinkNode(val)

        add_Node.pre=self.head

        add_Node.next=self.head.next

        self.head.next=add_Node

        self.head.next.pre=add_Node

        self.size+=1

       

    def push_last(self,val:int)->None:

        #队尾入队

        add_Node=LinkNode(val)

        add_Node.pre=self.tail.pre

        add_Node.next=self.tail

        self.tail.pre.next=add_Node

        self.tail.pre=add_Node

        self.size+=1

       

    def length_Queue(self)->int:

        #队列长度

        return self.size

   

    def IsNull(self)->bool:

        #判断队列是否为空

        return self.size==0

   

    def pop_first(self)->int:

        #删除队首元素

        a=self.head.next

        self.head.next=a.next

        a.next.pre=self.head

        a.next=None

        a.pre=None

        self.size-=1

        return a.val

   

    def pop_last(self)->int:

        #删除队尾元素

        a=self.tail.pre

        a.pre.next=self.tail

        self.tail.pre=a.pre

        a.pre=None

        a.next=None

        self.size-=1

        return a.val

   

    def to_list(self):

        #队列转化为列表

        traver_head=self.head

        list1=[]

        for i in range(self.size):

            traver_head=traver_head.next

            list1.append(traver_head.val)

        return list1

   

    def top(self):

        #访问队首元素

        if self.size==0:

            raise Exception("队列为空")

        return self.head.next.val

   

if __name__=='__main__':

    a=Double_Queue_Linklist()

    a.push_first(1)

    a.push_first(2)

    a.push_last(3)

    a.push_first(5)

    print(a.to_list())

    a.pop_first()

    # print(a.to_list())

    print(a.length_Queue())

    print(a.top())

 为什么他的val会显示没有属性,应该怎么改让to_list方法运行


Python 全系列/第十六阶段:数据结构与算法/数据结构与算法 4楼

class Double_Queue_Linklist:
    def __init__(self) :
        self.head=LinkNode(0)
        self.tail=LinkNode(0)
        self.head.next=self.tail
        self.tail.pre=self.head
        self.size=0
       
    def push_first(self,val:int)->None:
        #从队首入队
        add_Node=LinkNode(val)
        add_Node.pre=self.head
        add_Node.next=self.head.next
        self.head.next=add_Node
        self.head.next.pre=add_Node
        self.size+=1
       
    def push_last(self,val:int)->None:
        #队尾入队
        add_Node=LinkNode(val)
        add_Node.pre=self.tail.pre
        add_Node.next=self.tail
        self.tail.pre.next=add_Node
        self.tail.pre=add_Node
        self.size+=1
       
    def length_Queue(self)->int:
        #队列长度
        return self.size
   
    def IsNull(self)->bool:
        #判断队列是否为空
        return self.size==0
   
    def pop_first(self)->int:
        #删除队首元素
        a=self.head.next
        self.head.next=a.next
        a.next.pre=self.head
        a.next=None
        a.pre=None
        self.size-=1
        return a.val
   
    def pop_last(self)->int:
        #删除队尾元素
        a=self.tail.pre
        a.pre.next=self.tail
        self.tail.pre=a.pre
        a.pre=None
        a.next=None
        self.size-=1
        return a.val
   
    def to_list(self):
        #队列转化为列表
        traver_head=self.head
        list1=[]
        for i in range(self.size):
            traver_head=traver_head.next
            list1.append(traver_head.val)
        return list1
   
    def top(self):
        #访问队首元素
        if self.size==0:
            raise Exception("队列为空")
        return self.head.next.val
   
if __name__=='__main__':
    a=Double_Queue_Linklist()
    a.push_first(1)
    a.push_first(2)
    a.push_last(3)
    a.push_first(5)
    # print(a.to_list())
    a.pop_first()
    # print(a.to_list())
    print(a.length_Queue())
    print(a.top())
  为什么他运行不了


Python 全系列/第十六阶段:数据结构与算法/数据结构与算法 5楼
Python 全系列/第十六阶段:数据结构与算法/数据结构与算法 6楼
Python 全系列/第十六阶段:数据结构与算法/数据结构与算法 7楼
Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 8楼
Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 10楼
Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 11楼

"双链表"

class Node:

    def __init__(self, val) -> None:

       # 当前节点值

       self.val = val

       # 下一个节点

       self.next = next

       # 上一个节点

       self.prev = None


class MyLinkedList:


    def __init__(self):

        "循环"

        self.head = Node(-1)

        self.tail = Node(-1)

        # 让伪头节点的下一个节点是 伪尾节点

        self.head.next = self.tail

        # 让伪尾节点的下一个节点是 伪头节点

        self.tail.next = self.head

        self.size = 0



    def get(self,index: int) -> int:

        # 判断index是否有效

        if index < 0 or index > self.size:

            return -1

        curr = self.getNode(index)

        return curr.val

   

    def getNode(self,index:int) -> Node:

        # 判断index的值是否过了1半的索引

        if index < self.size//2:

            # 如果索引小于1半值,从头查找速度快一些

            curr = self.head # 获取头信息

            for i in range(index+1):

                curr = curr.next

        else:

            # 如果索引大于1半值,从尾查找速度快一些

            curr = self.tail # 获取尾信息

            for i in range(self.size - index):

                curr = curr.prev

        return curr


    def addAtHead(self, val: int) -> None:

        self.addNode(self.head,self.head.next,val)


    def addAtTail(self, val: int) -> None:

        self.addNode(self.tail.prev,self.tail,val)


    def addAtIndex(self, index: int, val: int) -> None:

        # 判断index是否有效

        if index > self.size:

            return

        if index < 0:

            index = 0

        # 找到要哪个节点前增加数据

        curr = self.getNode(index)

        # 增加节点

        self.addNode(curr.prev,curr,val)


    def addNode(self,first:Node,second:Node,val:int) -> None:

        # 创建一个新节点

        temp_node = Node(val)

        # 创建的下一个节点是second

        temp_node.next = second

        # 原第二个节点的上一节更新为 新创建的节点

        second.prev = temp_node

        # 第一个节点的下一个节点更新为 创建新节点

        first.next = temp_node

        # 新创建的节点的上一个节点 更新原第一个节点

        temp_node.prev = first

        # 更新节点数

        self.size += 1

     

    def deleteAtIndex(self, index: int) -> None:

        # 判断index是否有效

        if index < 0 or index > self.size:

            return

        # 获取要删除的节点

        curr = self.getNode(index)

        # 修改要删除节点的上一个节点的关系

        curr.prev.next = curr.next

        # 修改要删除节点的下一个节点的关系

        curr.next = curr.prev

        # 更新节点数

        self.size -= 1

image.png

老师您好,请问这个错要怎么改正?

Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 12楼
Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 13楼
Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 14楼
Python 全系列/第十六阶段:数据结构与算法/算法与数据结构 15楼

百战程序员微信公众号

百战程序员微信小程序

©2014-2024 百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637