Python 如何用列表实现栈和队列

来源:互联网 发布:java性能优化 编辑:程序博客网 时间:2024/05/16 05:51

前面学习了列表的基础知识,本着学以致用的原则,就想着如何通过列表来实现数据结构栈和队列。

1.栈结构,其实就是一个后进先出的一个线性表,只能在栈顶压入或弹出元素。用列表表示栈,则向栈中压入元素,可以用列表的append()方法来实现,弹出栈顶元素可以用列表的pop()方法实现。

>>> x=[]            #创建一个空列表,此处表示栈>>> x[]>>> x.append('a')   #压入元素'a'>>> x['a']>>> x.append('b')   #压入元素'b'>>> x['a', 'b']>>> x.pop()         #弹出栈顶元素'b''b'>>> x['a']>>> x.pop()         #弹出栈顶元素'a''a'>>> x[]>>> x.pop()         #试图对一个空栈做弹出操作,会报异常Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: pop from empty list
2.队列,其实就是一个先进先出的线性表,只能在队首执行删除操作,在队尾执行插入操作。用列表表示队列,可以用append()方法实现在队尾插入元素,用pop(0)方法实现在队首删除元素。

>>> x=[]>>> x.append('a')>>> x['a']>>> x.append('b')>>> x['a', 'b']>>> x.pop(0)'a'>>> x.pop(0)'b'>>> x.pop(0)Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: pop from empty list
细心观察克制,上面是把列表的最左边当做了队列的首,把最右边当做了尾(左首右尾)。也可以通过列表实现相反的队列,右首左尾。用insert(0,...)方法实现队尾插入元素,用pop()实现队首删除元素。(这样做是有意义的,人们习惯于把队列右边作为首的)
>>> x=[]>>> x.insert(0,'a')>>> x['a']>>> x.insert(0,'b')>>> x['b', 'a']      #是不是发现列表顺序和上面正好相反>>> x.pop()'a'>>> x.pop()'b'

备注:当然也可以使用insert(0,...)和pop(0)两个方法实现栈,不过这样不太符合人们的直观感受。

原创粉丝点击