Python:先进先出打印

标签 python lifo

我是 python 的初学者,我遇到了这个程序的问题:

下面的程序是后进先出 (LIFO)。我想采用先进先出 (FIFO) 计划。

from NodeList import Node

class QueueLL:

    def __init__(self):
        self.head = None


    def enqueueQLL(self,item):
        temp = Node(str(item))
        temp.setNext(self.head) 
        self.head = temp
        length = max(len(node.data) for node in self.allNodes()) if self.head else 0
        print('\u2510{}\u250c'.format(' '*length))
        for node in self.allNodes():
            print('\u2502{:<{}}\u2502'.format(node.data, length))
        print('\u2514{}\u2518'.format('\u2500'*length))

这是节点列表:

class Node:

    def __init__(self,initdata):
        self.data = initdata
        self.next = None

    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self,newdata):
        self.data = newdata

    def setNext(self,newnext):
        self.next = newnext

注意:“彩虹”应该在“弧”的底部或先进先出(下图为后进先出)

我正在考虑在 NodeList 中放置一个新的定义,例如 setPrevious 但我不知道该怎么做。 (老实说,我对这些 self.head = none 东西真的很陌生。我以前写过 self.items = [])

任何帮助和提示将不胜感激!谢谢!

最佳答案

除了学习目的,我不建议使用自定义数据结构来制作 LIFO 或 FIFO。毕竟,内置数据类型 list 就可以了。

您可以使用 append 方法添加项目并使用 pop 删除它们。对于 LIFO,这看起来像这样:

stack = list()
stack.append(1)
stack.append(2)
stack.append(3)

print stack.pop()  #3
print stack.pop()  #2
print stack.pop()  #1

如果您为 pop 提供整数参数,您可以指定要删除的元素。对于 FIFO,第一个元素使用索引 0:

stack = list()
stack.append(1)
stack.append(2)
stack.append(3)

print stack.pop(0)  #1
print stack.pop(0)  #2
print stack.pop(0)  #3

关于Python:先进先出打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219903/

相关文章:

c - 如何防止通过原子比较和交换实现的并发lifo堆栈中的损坏

python - 通过 sys 参数在 stdout 上传递\n(新行)

python - 如何在 python 中拆分非常长的正则表达式

python - 我应该从哪里开始使用 python 制作刮板或机器人?

list - Scheme中后进先出列表的实现

python - 在 Python 中节省内存。如何迭代行并使用 200 万行文件有效地保存它们?

python - Apache CustomLog 管道到脚本失败

bash - 如何在 Bash 中为 GNU Parallel 创建 Stack 或 LIFO

asynchronous - 使用 LIFO 逻辑运行的 MailboxProcessor