堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操做都只能在栈顶(top)进行。python
堆栈ADT(抽象数据类型)通常提供如下接口:算法
Stack()
建立堆栈push(item)
向栈顶插入项pop()
返回栈顶的项,并从堆栈中删除该项clear()
清空堆栈empty()
判断堆栈是否为空size()
返回堆栈中项的个数top()
返回栈顶的项堆栈操做的示意图以下:markdown
使用Python的内建类型list列表,能够很方便地实现堆栈ADT:数据结构
#!/usr/bin/env python # -*- 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]
十进制转二进制 是一个应用堆栈的典型案例。十进制转二进制 采用“除2取余,逆序排列”的方法,如图所示:app
借助Stack类,能够很方便地实现上述转换算法:ide
#!/usr/bin/env python # -*- coding: utf-8 -*- def divideBy2(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))
运行结果:code
$ python dec2bin.py 101010