1.栈的概念

一种有次序的数据项集合,在栈中,数据项的加入和移除都仅发生在同一端,遵循后进先出原则。

2.栈的python实现

列表的append()方法是在列表尾部添加数据项、pop()方法是从尾部剔除数据项。列表的添加和删除方法完美契合栈的特性,因此将列表的尾部设定为栈的顶部实现栈的搭建非常容易。如下为栈的python实现代码。

class Stack:
  #  栈的搭建
    def __init__(self):
        self.items = []
    def push(self,item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[-1]
    def isEmpty(self):
        return self.items == []
    def size(self):
        return len(self.items)

3.栈的应用

(1)括号匹配问题

括号匹配遵循后进先出原则适合使用栈来实现,如下为代码。

# 括号匹配问题
def match(top1,i1):
    # 检查左右括号类型是否匹配
    l1 = '({['
    l2 = ')}]'
    return l1.index(top1) == l2.index(i1)
def bracket(Str):
    # 检查括号匹配情况
    S = Stack()  # 创建栈
    n = 0  # 状态参数
    for i in Str:
        if i in '[{(':
            S.push(i)
        elif i in ')}]' and not S.isEmpty():
            top = S.peek()
            if not match(top,i):
                n = 2  # 用于表示匹配错误的情况
                print('匹配错误,请检查括号类型')
            else:
                S.pop()
        elif i in ')}]' and S.isEmpty():
            n = 1  # 用于表示存在多余右括号的情况
            print('存在多余的右括号')
    if S.isEmpty() and n == 0:
        print('不存在多余的括号')
    elif not S.isEmpty():
        print('左括号存在多余的情况')

(2)十进制转换为二进制

十进制的计算过程包括做除法和取余数,其中余数的生成和提取刚好遵循后进先出原则。

def binary_conversion(number):
    # 十进制转二进制
    s = Stack()
    string = ''
    while number//2 > 0:
        n = number % 2  # 余数
        s.push(n)
        number = number // 2  # 商
    if number//2 == 0 and number != 0:
        s.push(1)
    elif number == 0:
        s.push(0)
    while not s.isEmpty():
        string = string + str(s.pop())
    return string

更多推荐