栈的设计和使用

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

 

首先看一下栈的定义。栈是一个集合,具有下面的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

  

posted @ 2019-03-07 13:04  Sandy1128  阅读(454)  评论(0编辑  收藏  举报