【问题标题】:Stack and queue error in my program [closed]我的程序中的堆栈和队列错误[关闭]
【发布时间】:2015-12-01 12:22:34
【问题描述】:

我试图从 2 小时开始整理我的程序,但每次我都遇到同样的错误。

我正在使用 python 开发Stack, Queue and Linked List 程序。

请帮帮我,我的代码有什么问题?

import random

class Node(object):

    def __init__(self, other=None):
        self.other = other
        self.next = next
        self.previous = previous

    def __str__(self):
        return str(self.other)

class List(object):

    def __init__(self):
        self.head = None
        self.tail = None

    def append(self, value):
        newNode = Node(value)

        if self.head == None:
            self.head = newNode
            self.tail = newNode

        else:
            self.tail.next = newNode
            newNode.previous = self.tail
            self.tail = newNode

    def __str__(self):
        someString = ""
        current = self.head
        while current != None:
            someString = someString + current.other
            current = current.next
            return someString

class Queue(List):

    def enqueue(self, value):
        self.append(value)

    def dequeue(self):
        self.temp = self.head
        self.head = self.head.next
        return temp

class Stack(List):

    def push(self, value):
        self.append(value)

    def pop(self):
        self.temp = self.tail
        self.tail = self.tail.previous
        return self.temp

def main():

    list1 = List()
    for i in range(0, 100):
        list1.append(str(random.randrange(0, 100)))
        print(list1)

    queue = Queue()
    for i in range(0, 100):
        queue.enqueue(str(random.randrange(0, 100)))

    for i in range(0, 100):
        print(queue.dequeue)

    for i in range(0, 10):
        print("----------------------------------------")
        stack = Stack()
    for i in range(0, 100):
        stack.push(str(random.randrange(0, 100)))

    for i in range(0, 100):
        print(stack.pop())

if __name__ == "__main__":
    main()

这是我的输出截图:

SCREENSHOT

我们将不胜感激!

【问题讨论】:

  • Node__init__方法中,otherprevious应该来自哪里?
  • 您应该将错误消息放入代码块中的问题中,作为屏幕截图。请看How do I ask a good question?

标签: python linked-list stack queue


【解决方案1】:

这是我的建议。 输出似乎不错。

import random

class Node(object):

    def __init__(self, other=None):
        self.other = other
        self.next = None # next -> None
        self.previous = None # previous -> None

    def __str__(self):
        return str(self.other)

class List(object):

    def __init__(self):
        self.head = None
        self.tail = None

    def append(self, value):
        newNode = Node(value)

        if self.head == None:
            self.head = newNode
            self.tail = newNode

        else:
            self.tail.next = newNode
            newNode.previous = self.tail
            self.tail = newNode

    def __str__(self):
        someString = ""
        current = self.head
        while current != None:
            someString = someString + current.other
            current = current.next
        return someString # declease indent (get it out of the while loop)

class Queue(List):

    def enqueue(self, value):
        self.append(value)

    def dequeue(self):
        self.temp = self.head
        self.head = self.head.next
        if self.head is None: # add
            self.tail = None # add
        else: # add
            self.head.previous = None # add (cut the link to the dequeued node)
        return self.temp # temp -> self.temp

class Stack(List):

    def push(self, value):
        self.append(value)

    def pop(self):
        self.temp = self.tail
        self.tail = self.tail.previous
        if self.tail is None: # add
            self.head = None # add
        else: # add
            self.tail.next = None # add (cut the link to the popped node)
        return self.temp

def main():

    list1 = List()
    for i in range(0, 100):
        list1.append(str(random.randrange(0, 100)))
        print(list1)

    queue = Queue()
    for i in range(0, 100):
        queue.enqueue(str(random.randrange(0, 100)))

    for i in range(0, 100):
        print(queue.dequeue()) # dequeue -> dequeue()

    # I have no idea why this for is here.
    # for i in range(0, 10):
    print("----------------------------------------") # adjust indent
    stack = Stack() # adjust indent
    for i in range(0, 100):
        stack.push(str(random.randrange(0, 100)))

    for i in range(0, 100):
        print(stack.pop())

if __name__ == "__main__":
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2013-02-03
    • 2015-06-12
    • 2013-01-05
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多