zoukankan      html  css  js  c++  java
  • [Python数据结构] 使用List实现Stack

    [Python数据结构] 使用List实现Stack 

    1. Stack 
    堆栈(Stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象数据类型(ADT),其特殊之处在于只能允许在阵列的一端进行加入数据和删除数据,并且执行顺序应按照后进先出(LIFO)的原则。
    堆栈[维基百科]

    2. Stack ADT
    堆栈是一种抽象数据类型,其实例S需要支持两种方法:
      1)S.push(e)  : add element e to the top of stack S
      2)S.pop( )  : remove and return the top element from the stack S

    另外,为了方便使用,我们还定义了以下方法:
      3)S.top() : return the top element from the stack S, but not remove it
      4)S.is_empty() : Return True if the stack is empty
      5)len(S) : Return the number of elements in the stack

    3. Implementing a Stack using a List

    1 class Empty(Exception):
    2     """Error attempting to access an element from an empty container"""
    3     pass
    4  
    5 class OverFlow(Exception):
    6     """Error attempting to push an element to an full container"""
    7     pass
     1 class ArrayStack():
     2     """LIFO Stack implementation using a Python list as underlying storage"""
     3     
     4     def __init__(self, n):
     5         """Create an empty stack."""
     6         self.data = []
     7         self.maxLen = n  # n : an integer that represent the max elements capacity of the stack
     8  
     9     def __len__(self):
    10         """Return the number of elements in the stack"""
    11         return len(self.data)
    12     
    13     def is_empty(self):
    14         """Return True if the stack is empty"""
    15         return len(self.data) == 0 
    16     
    17     def is_full(self):
    18         """Return True if the stack is full"""
    19         return len(self.data) == self.maxLen
    20     
    21     def push(self, e):
    22         """Add element e to the top of the stack
    23         
    24          Raise Empty exception if the stack is full"""
    25         if self.is_full():
    26             raise OverFlow('Stack is full')            
    27         return self.data.append(e)
    28     
    29     def top(self):
    30         """Return the element at the top of the stack, but not move it.
    31         
    32         Raise Empty exception if the stack is empty"""
    33         if self.is_empty():
    34             raise Empty('Stack is empty')
    35         return self.data[-1]
    36     
    37     def pop(self):
    38         """Return the element at the top of the stack, meanwhile move it.
    39         
    40         Raise Empty exception if the stack is empty"""
    41         if self.is_empty():
    42             raise Empty('Stack is empty')
    43         return self.data.pop()

    4. 执行结果:

    1 s = ArrayStack(10)
    2 l = np.random.randint(0, 10, size=(10, ))
    3 for i in l:
    4     s.push(i)
    1 s.data
    2 [6, 8, 7, 4, 2, 3, 4, 1, 5, 8]
    1 s.pop()
    2 8
    1 s.data
    2 [6, 8, 7, 4, 2, 3, 4, 1, 5]
    1 s.top()
    2 5
    1 s.data
    2 [6, 8, 7, 4, 2, 3, 4, 1, 5]
  • 相关阅读:
    Scrapy 教程(三)-网站解析
    Scrapy 教程(二)-操作流程
    Scrapy 教程(一)-安装与入门
    高效编程之 多线程Event
    深信服 长方体的摆放
    2019 深信服 下棋(DFS+回溯)
    最优矩阵连乘问题 区间DP
    k种球若干,取n个球,输出所有取球方案 (模拟)
    KMP(模板)
    A. Optimal Currency Exchange 兑换硬币,剩下的钱最少
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9845355.html
Copyright © 2011-2022 走看看