【问题标题】:sorted queue using liked list使用链表排序队列
【发布时间】:2022-01-25 13:27:12
【问题描述】:

在入队时必须使用链表实现队列我必须按降序对队列进行排序并打印,出队是正常的

我每次入队时都调用了排序函数,排序函数中出现了一些错误 错误: [1]:https://i.stack.imgur.com/qVwri.png

class Queue:
    def __init__(self):
        self.front = self.rear = None

    class Node:
        def __init__(self, data):
            self.data = data  # Data part of the node
            self.next = None  # Next reference of the node
    def print(self):
        curr = self.front
        string = ''
        while curr:
            string += '|' + str(curr.data) + '|'
            curr = curr.next
        print(string)

    def is_Empty(self):
        return self.front == None

    def sort(self):
        curr = self.front
        while curr.next:
            if curr.data < curr.next.data:
                temp = curr.next
                curr.next = curr
                curr = temp
            curr = curr.next

    def Enqueue(self, item):
        temp = Node(item)
        if self.rear == None:
            self.front = self.rear = temp
            return
        self.rear.next = temp
        self.rear = temp

    def Dequeue(self):
        if self.is_Empty():
            return("The Queue is empty!")
        temp = self.front
        self.front = temp.next
        if (self.front == None):
            self.rear = None
            return self.rear

if __name__ == '__main__':
    q = Queue()
    while (True):
        choice = int(input("1. Enqueue\n2. Dequeue\n3. Exit\n"))
        if (choice == 1):
            data_ll = int(input("Please enter the data: "))
            q.Enqueue(data_ll)
            q.sort()
            q.print()
        elif (choice == 2):
            q.Dequeue()
            q.print()

【问题讨论】:

  • 接口不一致。 Dequeue 返回一个节点,而 Enqueue 接受一个值(项)。我的猜测是排序仅限于使用入队和出队操作,但当前代码似乎是尝试对链表进行排序,这是与队列不同的容器。您可能想要添加一个大小(队列中的元素数)函数(代码需要跟踪队列中的节点数)。如果使用第二个队列,则可以实现归并排序。

标签: sorting linked-list queue


【解决方案1】:

第一个错误是在 Enqueue 函数中创建节点。内部类函数应该称为 self.Node ,另一件事是排序函数不排序。
下面给出的是固定代码

class Queue:
    

    class Node:
        def __init__(self, data):
            self.data = data  # Data part of the node
            self.next = None  # Next reference of the node
            
            
    def __init__(self):
        self.front = self.rear = None        
    def print(self):
        curr = self.front
        string = ''
        while curr:
            string += '|' + str(curr.data) + '|'
            curr = curr.next
        print(string)

    def is_Empty(self):
        return self.front == None
        
    def get_size(self):
        
        temp = self.front 
        count = 0 
        while (temp):
            count += 1
            temp = temp.next
        return count

    def sort(self):
        
        # print("[",curr.data,"]")
        count=self.get_size()
        while(count):  
            curr = self.front
            while (curr and curr.next):
                if curr.data > curr.next.data:
                    temp=curr.data
                    curr.data=curr.next.data
                    curr.next.data=temp
              
                curr = curr.next
            count-=1    

    def Enqueue(self, item):
        temp = self.Node(item)
        if self.rear == None:
            self.front = self.rear = temp
            return
        self.rear.next = temp
        self.rear = temp

    def Dequeue(self):
        if self.is_Empty():
            return("The Queue is empty!")
        temp = self.front
        self.front = temp.next
        if (self.front == None):
            self.rear = None
            return self.rear

if __name__ == '__main__':
    q = Queue()
    while (True):
        choice = int(input("1. Enqueue\n2. Dequeue\n3. Exit\n"))
        if (choice == 1):
            data_ll = int(input("Please enter the data: "))
            q.Enqueue(data_ll)
            q.sort()
            q.print()
        elif (choice == 2):
            q.Dequeue()
            q.print()
```

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多