zoukankan      html  css  js  c++  java
  • 用Python实现的数据结构与算法:堆栈

    一、概述

    堆栈(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 binString
    
    if __name__ == '__main__':
        print(divideBy2(42))
    

    运行结果:

    $ python dec2bin.py
    101010
    
  • 相关阅读:
    How to access the properties of an object in Javascript
    他们不是机器人
    sql 使用整理
    地图上计算两点间的距离.(参考网络)
    window.location.reload被弃用?
    BitBlt
    BitBlt介绍
    C#大数计算 .Net Framework4.0以下
    C# ToString格式化
    Ubuntu修改时区和更新时间
  • 原文地址:https://www.cnblogs.com/russellluo/p/3282563.html
Copyright © 2011-2022 走看看