zoukankan      html  css  js  c++  java
  • 栈的设计和使用

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

    首先看一下栈的定义。栈是一个集合,具有下面的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 Save Action功能
    mysql优化
    数据库从RDS迁入自己服务器上问题记录
    阿里云centos6.5安装nginx
    阿里云mysql安装
    卸载wdcp面板命令
    高性能MYSQL读书笔记1
    DelayedQueue
    spring+atomikos 实现的分布式事务
    关闭Eclipse的控制台console自动跳出
  • 原文地址:https://www.cnblogs.com/Sandy-1128/p/appium-python-sandy-0307-1.html
Copyright © 2011-2022 走看看