如何实现栈

时间:2019-01-17
本文章向大家介绍如何实现栈,主要包括如何实现栈使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
"""
实现一个栈的数据结构,使其具有以下方法:压栈,弹栈,取栈顶元素,判断栈是否为空,以及获取栈中元素的个数。
"""


# 方法一:数组实现
class MyStack1:
    # 模拟栈
    def __init__(self):
        self.items = []

    # 判断栈是否为空
    def isEmpty(self):
        return len(self.items) == 0

    # 返回栈的大小
    def size(self):
        return len(self.items)

    # 返回栈顶的元素
    def top(self):
        if not self.isEmpty():
            return self.items[len(self.items) - 1]
        else:
            return None

    # 弹栈
    def pop(self):
        if not self.isEmpty():
            return self.items.pop()
        else:
            print('栈已经为空')
            return None

    # 压栈
    def push(self, item):
        self.items.append(item)


# 方法二:链表实现
class LNode:
    def __int__(self):
        self.data = None
        self.next = None


class MyStack2:
    def __init__(self):
        self.data = None
        self.next = None

    # 判断stack是否为空,如果为空返回true,否则返回else
    def empty(self):
        if self.next is None:
            return True
        else:
            return False

    # 获取栈中元素的个数
    def size(self):
        size = 0
        p = self.next
        while p is not None:
            p = p.next
            size += 1
        return size

    # 入栈:把e放在栈顶
    def push(self, e):
        p = LNode()
        p.data = e
        p.next = self.next
        self.next = p

    # 出栈:同时返回栈顶元素
    def pop(self):
        tmp = self.next
        if tmp is not None:
            self.next = tmp.next
            return tmp.data
        print('栈已经空')
        return None

    # 取得栈顶元素
    def top(self):
        if self.next is not None:
            return self.next.data
        print('栈已经空')
        return None


if __name__ == '__main__':
    s = MyStack1()
    s.push(4)
    print('栈顶元素为:' + str(s.top()))
    print('栈大小为:' + str(s.size()))
    s.pop()
    print('弹栈成功')
    s.pop()

    stack = MyStack2()
    stack.push(1)
    print('栈顶元素为:' + str(stack.top()))
    print('栈的大小:' + str(stack.size()))
    stack.pop()
    print('弹栈成功')
    stack.pop()

运行结果如下:
栈顶元素为:4
栈大小为:1
弹栈成功
栈已经为空
栈顶元素为:1
栈的大小:1
弹栈成功
栈已经空