Python:先进先出打印

Python:先进先出打印,python,lifo,Python,Lifo,我是python的初学者,我对这个程序有一个问题: 下面的程序是后进先出(LIFO)。我想做先进先出(FIFO)程序 注:“彩虹”应位于“弧”的底部或FIFO中(下图为后进先出) 我正在考虑在节点列表中添加一个像setPrevious这样的新def,但我不知道怎么做。(老实说,我对这些self.head=none的东西真的很陌生。我以前写self.items=[])) 任何帮助和提示都将不胜感激!谢谢大家! 除了学习目的,我不建议使用自定义数据结构进行后进先出或先进先出。内置的数据类型列表毕竟

我是python的初学者,我对这个程序有一个问题:

下面的程序是后进先出(LIFO)。我想做先进先出(FIFO)程序

注:“彩虹”应位于“弧”的底部或FIFO中(下图为后进先出)

我正在考虑在节点列表中添加一个像setPrevious这样的新def,但我不知道怎么做。(老实说,我对这些self.head=none的东西真的很陌生。我以前写self.items=[]))


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

除了学习目的,我不建议使用自定义数据结构进行后进先出或先进先出。内置的数据类型
列表
毕竟还不错

您可以使用
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

好吧,既然你的课程可能已经结束了,而你在问题本身中没有提到你的课程(或者它必须是一个链表),那么我现在就告诉你一个内置的简单方法,它可能更适合你的当前情况(并将帮助找到你的问题的人)

这个输出

first
second
third
真的,虽然,我不确定这比康斯坦丁尼乌斯的答案有什么优势,但由于它是一个包含模块,我认为一定有优势的地方。我知道它们与线程模块中的线程一起使用。与队列相关的函数比我在这里提到的要多

要了解更多信息,请打开Python解释器并键入以下内容:

from queue import Queue #or from Queue import Queue for 2.x
help(Queue) #Press q to exit the help
不要问我什么是阻塞,但这可能会在队列类文档中使用术语:

我也想使用内置的数据类型,但我不知道如何将其转换为链接列表。为什么需要链接列表?我们班要求我使用链接列表实现队列(包括其他数据结构类型)。
list
适合堆栈,因为
.append()
.pop()
都很快。但是,它不是FIFO队列的最佳选择,因为
.pop(0)
速度很慢(它的复杂性不是
O(1)
)。对FIFO使用
collections.deque
。队列类型是线程保存,而列表类型不是(这就是队列可以阻止的原因)。在这里,以fifo方式创建、填充和清空列表的速度比使用队列创建、填充和清空列表的速度快30倍以上。因此,如果您不需要线程savety。。。
import sys;
if sys.version_info[0]>2: #Just making sure the program works with both Python 2.x and 3.x
    from queue import Queue
else:
    from Queue import Queue

q=Queue()
q.put("first") #Put an item on the Queue.
q.put("second")
q.put("third")

while not q.empty(): #If it's empty, the program will stall if you try to get from it (that's why we're checking)
    print(q.get()) #Get an item from the Queue
first
second
third
from queue import Queue #or from Queue import Queue for 2.x
help(Queue) #Press q to exit the help
class Box:
    def __init__(self,data):
        self.data=data
        self.next=None        
class List:
    def __init__(self):
        self.head=None        
    def add(self,item):                
        temp=Box(item)                
        if self.head==None:
            self.head=temp
            self.prev=temp
        self.prev.next=temp
        self.prev=self.prev.next               
    def PrintList(self):
        while self.head!=None:
            print(self.head.data)
            self.head=self.head.next

myList=List()
myList.add("Vinoth")
myList.add("Karthick")
myList.add("Ganesh")
myList.add("Malai")
myList.add("Shan")
myList.add("Saravana")
myList.PrintList()