Python数据结构—-栈

是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内的一摞盘子是现实世界中常见的栈的例子。只能从最上面取盘子,盘子洗净后,也只能摞在这一摞盘子的最上面。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。

由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须先拿掉上面的元素。

对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push()方法,出栈使用pop()方法。下图演示了入栈和出栈的过程。

如图所示:

另一个常用的操作是预览栈顶的元素。pop()方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek()方法则只返回栈顶元素,而不删除它。

为了记录栈顶元素的位置,同时也为了标记哪里可以加入新元素,我们使用变量top,当向栈内压入元素时,该变量增大;从栈内弹出元素时,该变量减小。

push()、pop()和peek()是栈的3个主要方法,但是栈还有其他方法和属性。

Stack通常的操作:
Stack() 建立一个空的栈对象
push() 把一个元素添加到栈的最顶层
pop() 删除栈最顶层的元素,并返回这个元素
peek() 返回最顶层的元素,并不删除它
isEmpty() 判断栈是否为空
size() 返回栈中元素的个数

Stack代码示例如下:

class Stack:
    """stack"""
    def __init__(self):
        self.items = []

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

    #把一个元素添加到栈的最顶层
    def push(self, item):
        if item is not None:
            self.items.append(item)

    #删除栈最顶层的元素,并返回这个元素
    def pop(self):
        return self.items.pop()

    #返回最顶层的元素,并不删除它
    def peek(self):
        if not self.isEmpty():
            return self.items[len(self.items)-1]

    #返回栈中元素的个数
    def size(self):
        return len(self.items)

简单案例以及操作结果:
通过创建一个StackTester.py 进行操作测试,代码如下:

from data_structure.StackDemo import Stack

#创建一个栈对象stack
stack = Stack()

#测试是否为空
flag = stack.isEmpty()
print(flag)                                       #True

#往栈中添加元素
stack.push("apple")
stack.push("android")
stack.push("windows")
stack.push("linux")

#预览栈顶元素
item = stack.peek()
print("栈顶元素为:{0}".format(item))              #linux

#获取栈中元素个数
size = stack.size();
print(size)                                        # 4 个

#再测试是否为空
print(stack.isEmpty())                             # False

#依次从栈顶到栈底获取并删除元素, 最后为空栈
for i in range(stack.size()):
    print(stack.pop())

操作测试结果为:
True
栈顶元素为:linux
4
False
linux
windows
android
apple

你可能感兴趣的:(Python)