数据结构和算法(七)栈

定义

栈又名堆栈,可存入数据元素、访问元素、删除元素,其特点是只能在一端进行数据的输入(入栈)和输出(出栈)。
由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

python 实现栈结构

class Stack(object):
	"""
	堆栈实现
	"""
	def __init__(self):
		self.item = []

	def is_empty(self):
		"""
		判断栈是否为空
		"""
		return self.item == []

	def push(self, item):
		"""
		添加元素
		"""
		self.item.append(item)

	def pop(self):
		"""
		弹出栈顶元素
		"""
		return self.item.pop()

	def peek(self):
		"""
		返回栈顶元素
		"""
		return self.item[len(self.item) - 1]

	def size(self):
		"""
		返回栈的大小
		"""
		return len(self.item)

		
if __name__ == '__main__':
    s = Stack()
    print("当前栈是否为空", s.is_empty())
    print("当前栈大小:", s.size())

    s.push(1)
    s.push(96)
    s.push(55)
    print("当前栈顶元素为:", s.peek())
    print("出栈元素为:", s.pop())
    print("当前栈顶元素为:", s.peek())
    print("当前栈是否为空", s.is_empty())
    print("当前栈大小:", s.size())

结果

当前栈是否为空 True
当前栈大小: 0
当前栈顶元素为: 55
出栈元素为: 55
当前栈顶元素为: 96
当前栈是否为空 False
当前栈大小: 2

经典算法

括号匹配:字符串中有括号”()[]{}”,设计算法,判断该字符串是否有效
括号必须以正确的顺序配对,如:“()”、“()[]”是有效的,但“([)]”无效

解题思路:使用栈来实现。右括号总是与最近的左括号匹配 栈的后进先出的特点。
从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对。
当栈为空时,遇到右括号,则此右括号无与之匹配的左括号。
当最终右括号匹配完毕后栈内还有剩余元素,则表明这些位置的左括号没有与之匹配的右括号。

代码实现

def parentheses_match(value):
	stack = []	
	for parentheses in value:
		# 匹配到左括号入栈
		if parentheses == '(' or parentheses == '{' or parentheses == '[':
			stack.append(parentheses)
		elif parentheses == ')' or parentheses == '}' or parentheses == ']':
			if stack == []:
				return False
			stack.pop()
	return stack == []
examples = ['{}{}()[()]','{(}(())','{[()]}']
	for example in examples:
		print(parentheses_match(example))

结果

True
False
True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值