您的位置:首页 > 理论基础 > 数据结构算法

用Python学习数据结构3--堆栈

2016-10-29 22:41 204 查看

一、概述

堆栈(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()


结果显示如下:



本文参考自:http://www.cnblogs.com/russellluo/p/3282563.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据结构