1. 程式人生 > >棧的演算法實現

棧的演算法實現

class Stack(object):

    def __init__(self):
        self.pTop = None
        self.pBottom = None


class Node(object):
    def __init__(self, data=None, pNext=None):
        self.data = data
        self.pNext = pNext


def pushStack(s, pNew):
    pNew.pNext = s.pTop
    s.pTop = pNew


def popStack(s):
    cur = s.pTop
    while cur != s.pBottom:
        s.pTop = cur.pNext
        print("出棧的元素是:%s" % cur.data)
        cur = cur.pNext
    else:
        print("出棧失敗")


def showAll(s):
    cur = s.pTop

    while cur != s.pBottom:
        print("元素是:%s" % cur.data)
        cur = cur.pNext


def isEmpty(s):
    if s.pTop == s.pBottom:
        print("the stack is empty")
        return True
    return False


def clearStack(s):
    """
    和pop的區別在於,pop讓python來清空引用計數為0的資料
    clear要我們手動清空
    :param s:
    :return:
    """
    if isEmpty(s):
        return None
    cur = s.pTop
    q = None
    while cur != s.pBottom:
        q = cur.pNext
        del cur
        cur = q
    else:
        s.pBottom = s.pTop


s = Stack()
p = Node()
s.pTop = s.pBottom = p

n1 = Node(4)
pushStack(s, n1)

n2 = Node(5)
pushStack(s, n2)

n3 = Node(6)
pushStack(s, n3)

n4 = Node(2)
pushStack(s, n4)

print("**********遍歷元素***************")
showAll(s)

# print("************出棧*****************")
# popStack(s)

print("*************清空棧*************")
clearStack(s)