2018-07-09顺序表实现栈

栈的实现

——直接用顺序表(列表list)进行

栈结构实现

栈可以用顺序表实现,也可以用链表实现。

栈的操作

Stack() 创建一个新的空栈
push(item) 添加一个新的元素item到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素——不出栈
is_empty() 判断栈是否为空
size() 返回栈的元素个数

添加元素,称为“压栈”(“入栈”),英文中成为push
弹出元素,在栈顶pop出元素

  • 逻辑值真假总结:
    假:空字符串,0,空列表,空元组
数据类型 False True
整型 0 其他
浮点型 0.0 其他
字符串 ‘’ 其他
字典 {} 其他
元组 () 其他
列表 [] 其他
None None 空格

不同逻辑运算符的优先级:

not > and > or

代码实现:

# coding:utf-8

class Stack(object):
    """栈"""
    """Stack() 创建一个新的空栈
push(item) 添加一个新的元素item到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素
is_empty() 判断栈是否为空
size() 返回栈的元素个数"""

    def __init__(self):
        # 不希望把容器直接给使用者,否则别人可以绕过以下功能直接操作
        self.__list = []  # 一开始没有元素,空列表

    def push(self, item):
        """添加新的元素"""
        # 根据容器不同,选择头尾
        self.__list.append(item)
        # self.__list.insert(0, item)  # 用顺序表的话,尾部为O(1)

    def pop(self):
        """弹出栈元素"""
        return self.__list.pop()

    def peek(self):
        """返回栈顶元素"""
        # 空列表不支持-1操作,所以要有判断
        if self.__list:
            return self.__list()
        else:
            return None

    def is_empty(self):
        """判断是否为空"""
        # 遇到return的时候,先计算右边的值,如果是逻辑值就返回
        # 判断空,如果是空的,就返回真,否则返回假
        return self.__list == []
        # return not self.__list 等同的效果

    def size(self):
        """返回栈元素的个数"""
        return len(self.__list)

if __name__ == "__main__":
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())

实现结果:


结果

你可能感兴趣的:(2018-07-09顺序表实现栈)