数据结构 栈的实现及应用

第1关:栈抽象数据类型及其实现

# -*- coding: utf-8 -*-

'''请在Begin-End之间补充代码, 完成Stack类'''
class Stack():
    # 创建空列表实现栈
    def __init__(self): 
        self.__list = []
  
    # 判断是否为空,输出为True或False
    def is_empty(self): 
        # ********** Begin ********** #
       return len(self.__list) == 0
        # ********** End ********** #   
    # 压栈,添加元素
    def push(self,item): 
        # ********** Begin ********** #
       self.__list.append(item)
        # ********** End ********** #  
    # 弹栈,弹出最后压入栈的元素
    def pop(self): 
        # ********** Begin ********** #
        if not self.is_empty():
            return self.__list.pop()
        else:
            return None
        # ********** End ********** #  
    # 栈的长度
    def size(self):
        # ********** Begin ********** #
        return len(self.__list)
        # ********** End ********** #      

if __name__ == "__main__":
    stack = Stack() 
    nums = input().split()
    # 将nums中的元素依次入栈
    for num in nums:
        stack.push(num)
    # 打印栈的长度
    print(stack.size())
    # 将栈中元素依次弹出
    while not stack.is_empty():
        print(stack.pop(), end = ' ')

第2关:栈应用之括号匹配问题

# -*- coding: utf-8 -*-

class Stack():
    # 创建空列表实现栈
    def __init__(self): 
        self.__list = []   
    # 判断是否为空
    def is_empty(self): 
        return self.__list == []
    # 压栈,添加元素
    def push(self,item): 
        self.__list.append(item)
    # 弹栈,弹出最后压入栈的元素
    def pop(self): 
        if self.is_empty():
            return 
        else:
            return self.__list.pop() 
        
'''请在Begin-End之间补充完成代码, 完成syntaxChecker函数, 解决括号匹配问题'''
def syntaxChecker(strList):
    ### strList: 字符串列表
    stack = Stack()
    left = '([{'     # 左括号
    right = ')]}'    # 右括号
    flag = True      # 标志位
    # ********** Begin ********** #
    for symbol in strList:
        if symbol in left:
            stack.push(symbol)
        elif symbol in right:
            if stack.is_empty():
                flag = False
                break
            top = stack.pop()
            if left.index(top) != right.index(symbol):
                flag = False
                break
    
    if not stack.is_empty():
        flag = False
    # ********** End ********** # 
    return flag

if __name__ == "__main__":
    strList = input().split()
    result = syntaxChecker(strList)
    print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值