• [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]
  • 相关阅读:
    提升工作效率的方法
    Spark Streaming 实现思路与模块概述
    Reduce Side Join实现
    File file:/data1/hadoop/yarn/local/usercache/hp/appcache/application_* does not exi
    Caused by: java.io.IOException: Filesystem closed的处理
    linux下nproc的作用
    Spark Streaming 的一些问题
    php代码审计7审计csrf漏洞
    php代码审计6审计xss漏洞
    php代码审计5审计命令执行漏洞
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9845355.html
Copyright © 2020-2023  润新知