- 堆栈
堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行。栈和队列主要用于计算过程中保存临时数据。
- 堆栈ADT(抽象数据类型)一般提供以下接口:
Stack()创建堆栈
push(item)向栈顶插入项
pop()返回栈顶的项,并从堆栈中删除该项
clear()清空堆栈
empty()判断堆栈是否为空
size()返回堆栈中项的个数
top()返回栈顶的项
堆栈操作的示意图如下:
- Python实现
使用Python的内建类型list列表,可以很方便地实现堆栈ADT:
#!/usr/bin/envpython
# -*- coding: utf-8-*-
class Stack:
def __init__(self):
self.items = []
#入栈
def push(self, item):
self.items.append(item)
#弹出元素
def pop(self):
return self.items.pop()
#清空栈
def clear(self):
del self.items[:]
#判断栈顶是否为空
def empty(self):
return self.size() == 0
#返回栈中元素的个数
def size(self):
return len(self.items)
#返回栈顶元素
def top(self):
return self.items[self.size()-1]
4.应用
十进制转二进制 是一个应用堆栈的典型案例。十进制转二进制 采用“除2取余,逆序排列”的方法,如图所示:
借助Stack类,可以很方便地实现上述转换算法:
#!/usr/bin/envpython
# -*- coding: utf-8-*-
#创建栈
defdivideBy2(decNumber):
remstack = Stack()
#将余数压入栈
while decNumber > 0:
rem = decNumber % 2
remstack.push(rem)
decNumber = decNumber // 2
#弹出站内元素,依次连接字符串
binString = ""
while not remstack.empty():
binString = binString +str(remstack.pop())
return binString
if __name__ =='__main__':
print(divideBy2(42))
运行结果:
$ python dec2bin.py
101010
原文参考:http://www.cnblogs.com/russellluo/p/3282563.html