博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Python实现的数据结构与算法:堆栈
阅读量:5223 次
发布时间:2019-06-14

本文共 1213 字,大约阅读时间需要 4 分钟。

一、概述

堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行。

二、ADT

堆栈ADT(抽象数据类型)一般提供以下接口:

  • Stack() 创建堆栈
  • push(item) 向栈顶插入项
  • pop() 返回栈顶的项,并从堆栈中删除该项
  • clear() 清空堆栈
  • empty() 判断堆栈是否为空
  • size() 返回堆栈中项的个数
  • top() 返回栈顶的项

堆栈操作的示意图如下:

堆栈操作

三、Python实现

使用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取余,逆序排列”的方法,如图所示:

十进制转二进制

借助Stack类,可以很方便地实现上述转换算法:

#!/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 binStringif __name__ == '__main__':    print(divideBy2(42))

运行结果:

$ python dec2bin.py101010

转载于:https://www.cnblogs.com/russellluo/p/3282563.html

你可能感兴趣的文章
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
《代码阅读方法与实现》阅读笔记一
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
关于MFC中窗口的销毁
查看>>