• 栈的设计和使用


    栈是常用的数据结构。尽管一般的面试里不会让直接写一个栈的实现,不过跟栈有关的编程题很多,今天就遇到一个。

    首先看一下栈的定义。栈是一个集合,具有下面的2种基本操作

    • push: 把元素加入集合,这个过程我们叫做压入

    • pop: 把最后加入集合的元素从集合中移除,这个过程我们叫做推出

    所以栈在移除元素的时候是遵循LIFO(last in, first out),也就是后进先出的原则的。

    直接设计代码:

    class stack(object):
    	"""docstring for stack"""
    	def __init__(self, data):
    		self.data = []
    
    
    	def push(self,elm):
    		self.data.append(elm)
    
    	def pop(self):
    		self.data.pop()
    
    	def len(self):
    		return len(self.data)
    
    
    	def is_empty(self):
    		return len(self)== 0
    

      

    题目:请使用代码实现判断表达式中小括号是否匹配的功能。如果匹配返回True,否则返回False。比如(x * (y +z)) +10中,小括号是匹配的。而(a + b) * )c - d中小括号是不匹配的。

    遍历表达式每一个字符

    • 如左括号,将左括号压入栈

    • 如右括号,则判断栈是否为空,不为空则推出,为空就证明右括号没有匹配的项目,返回False

    • 遍历结束之后判断栈是否为空,不为空则返回False,否则返回True

    完整代码实现如下

    def match_parentthese(erp):
    
    	data = stack()
    
    	for ele in erp:
    		if ele == "(":
    			data.push(ele)
    		elif ele == ")":
    			if data.is_empty():
    				return False
    				break
    
    			else:
    				data.pop()
    
    		else:
    			pass
    
    	if data.is_empty():
    		return True
    	else:
    		return False
    

      

  • 相关阅读:
    eclipse禁用svg文件Validation
    在centos上安装jenkins
    5.volatile的应用
    4.资源限制
    linux git保存用户名密码(避免每次push输用户名密码)
    mysql 从库落后主库太多优化
    mfs使用指引
    Asura监控---AsuraMonitor,阿修罗监控开源
    docker overlay网络实现
    ELK+kafka日志收集
  • 原文地址:https://www.cnblogs.com/Sandy-1128/p/appium-python-sandy-0307-1.html
Copyright © 2020-2023  润新知