链表栈与队列的实现

队列与栈的链表实现,做个备份,和列表实现换汤不换药,大家自己看吧

队列:

 

"""
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

 

 

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