1. 栈:后进先出(LIFO),最先添加的元素将被最先移除

 

 

2.支持的操作↓

·Stack()    创建一个空栈。它不需要参数,且会返回一个空栈。

·push(item)    将一个元素添加到栈的顶端。它需要一个参数item,且无返回值。

·pop()     将栈顶端的元素移除。它不需要参数,但会返回顶端的元素,并且修改栈的内容。

·peek()      返回栈顶端的元素,但是并不移除该元素。它不需要参数,也不会修改栈的内容。

·isEmpty()   检查栈是否为空。它不需要参数,且会返回一个布尔值。

·size()     返回栈中元素的数目。它不需要参数,且会返回一个整数。

 

3.实现

"""假设列表的尾部是栈的顶端"""
class
Stack: def __init__(self):
     """创建一个空栈""" self.items
= [] def isEmpty(self): return self.size()==0def size(self): return len(self.items) def push(self,item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): return self.items[len(self.items)-1]

 

4.用法一:匹配括号

"""匹配括号"""
import Stack

def matching(symbolString):
    """创建一个空栈"""
    s = Stack()

    index = 0
    while index < len(symbolString):
        symbol = symbolString[index]
     """如果是]})三种右括号,判断栈里顶端元素是否为和它对应的左括号。"""
if symbol == ")" and s.peek() == "(": s.pop() elif symbol == "]" and s.peek() == "[": s.pop() elif symbol == "}" and s.peek() == "{": s.pop() else: s.push(symbol) index += 1 if s.size() == 0: return True else: return False

 

5.用法二:将十进制转换成二进制

import Stack

def divideBy2(decNumber):
    test = Stack()

    while decNumber > 0:
        remainder = decNumber % 2
        test.push(remainder)
        decNumber = decNumber // 2

    binString = ""

    while not test.isEmpty():
        binString = binString + str(test.pop())

    return binString

 

6.用法三:将十进制转换成任意进制数

import Stack

def baseConverter(decNumber,base):
    test = Stack()

    #可选数字
    digits = "0123456789ABCDEF"

    while decNumber > 0:
        remainder = decNumber % base
        test.push(remainder)
        decNumber = decNumber // base

    newString = ""

    while not test.isEmpty():
        newString = newString + digits[test.pop()]

    return newString