一、概述
堆栈(Stack):先进后出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行
二、ADT
堆栈ADT(抽象数据类型)一般提供一下接口:
- 创建堆栈 Stack()
- 向栈顶插入项 push(item)
- 返回栈顶的项,并从堆栈中删除该项 pop()
- 清空堆栈 clear()
- 判断堆栈是否为空 empty()
- 返回堆栈中项的个数 size()
返回栈顶的项 top()
栈的调用过程及内部数据变化如下所示:
三、Python实现
stack.py的定义
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 29 21:50:25 2016
@author: Serana
"""
class Stack:
def __init__(self):
print("stack __init__")
self.items=[]
#获取指定位置元素值
def __getitem__(self, i):
return self.items[i]
#修改是定位置元素值
def __setitem__(self, i, v):
self.items[i] = v
#返回栈中元素个数
def __len__(self):
return self.size()
#入栈
def push(self,item):
self.items.append(item)
#弹出元素
def pop(self):
return self.items.pop()
#返回栈中元素的个数
def size(self):
return len(self.items)
#判断栈顶是否为空
def empty(self):
return self.size() == 0
#返回栈顶元素
def top(self):
return self.items[self.size() - 1]
#清空栈
def clear(self):
del self.items[:]
测试文件 test.py 如下:
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 29 21:50:25 2016
@author: Serana
"""
from stack import Stack
def test():
s=Stack()
s.push(1)
s.push(2)
s.push(3)
s.top() #显示栈顶元素
while not s.empty():
print("正在弹出元素")
print(s.pop())
s.push(4)
s.push(5)
s.push(6)
print(len(s))
print(s[1])
print("清空栈")
s.clear()
print(s.size())
if __name__ == "__main__":
test()
结果显示如下: