鏈表棧與隊列的實現

隊列與棧的鏈表實現,做個備份,和列表實現換湯不換藥,大家自己看吧

隊列:

 

"""
link queue

"""

from SQueue import QueueError

class Node():
    def __init__(self,val,next = None):
        self.val = val
        self.next =next
class LQueue():
    def __init__(self):
        self.rear = Node(None)
        self.front = self.rear
    def is_empty(self):
        return self.front == self.rear

    def enqueue(self,elem):
        self.rear.next = Node(elem)
        self.rear = self.rear.next

    def dequeue(self):
        if self.front == self.rear:
            raise QueueError("Queue is None")
        self.front = self.front.next
        return self.front.val

if __name__ ==  "__main__":
    lq = LQueue()
    print(lq.is_empty())

    lq.enqueue(10)
    lq.enqueue(20)
    lq.enqueue(30)
    while not lq.is_empty():
        print(lq.dequeue())

 棧:

class Stack(object):
    def __init__(self):
        self.top = Node(None)               #這裏需要直接讓棧頂成爲空節點
    def push(self, val):                      #而不是None,原因見下
        node = Node(val)
        node.next = self.top
        self.top = node
    def pop(self):
        pops = self.top
        self.top = self.top.next
        return pops.val
    def showstack(self):
        p = self.top
        while p.next is not None:                     #如果棧頂不是節點而是空的話,
            print(p.val)                            #在棧底的上個節點next爲空
            p = p.next                            #使得無法全部打印出棧中的元素!

sstack = Stack()
sstack.push(1)
sstack.push(2)
sstack.push(3)
sstack.push(4)
sstack.push(5)
sstack.pop()
sstack.showstack()

測試:符合後進先出,實現壓棧彈棧工作。

4
3
2
1
Process finished with exit code 0

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章