栈相关的题目 【栈的反转,栈的排序】

本文介绍了一种仅使用递归函数和栈本身pop操作实现栈逆序的方法,以及一种利用辅助栈对栈进行升序排序的算法,适用于数据结构与算法初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈的反转

实现栈的逆序,但是只能使用递归函数和栈本身的pop操作。

解法:

首先定义一个get方法,该方法用于将栈底的元素取出并返回。然后定义reverseStack方法,在该方法中,首先取出栈底元素,然后对移除栈底元素的栈递归调用reverseStack方法,直到栈为空,返回。返回后,将取出的栈底元素一次入栈,这样的话,最后一次取出的栈底元素(实际的栈顶元素)就落在了栈底,从而实现了栈的逆序。

def get(stack):
    # 先弹出栈顶元素
	item = stack.pop()
	# 若此时栈为空,说明栈顶元素为原先的栈底元素,直接返回它
	if stack == []:
	    return item
	else:
	    # 递归调用get方法,获取栈底元素
	    last = get(stack)
	    # 将弹出的元素依次入栈
	    stack.append(item)
	    return last

def reverseStack(stack):
	if stack == []:
		return
	# 弹出栈底元素
	bottom_item = get(stack)
	# 递归调用反转方法,不断地弹出栈底元素
    reverseStack(stack)
    # 将栈底元素入栈
    stack.append(bottom_item)
    return stack

栈的排序

请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。

解法:

定义一个辅助栈,设法将辅助栈的元素按降序排列。首先弹出待排序的栈的栈顶元素,记为current,若辅助栈为空,直接将其压入辅助栈,若辅助栈不为空,且current小于等于辅助栈的栈顶元素,也将其压入辅助栈。如果辅助栈不为空,且current大于辅助栈的栈顶元素,则将辅助栈的栈顶元素不断地压入原始栈中,直到满足current小于等于辅助栈栈顶元素或辅助栈为空。
这个过程的结束条件是原始栈的所有元素都被压入至辅助栈中,具体代码如下。

def stackSort(stack):
	help_stack = []
	# 循环条件
	while stack != []:
		# 弹出栈顶元素
		current = stack.pop()
		# 若辅助栈不为空,且current大于辅助栈的栈顶元素,将辅助栈的元素依次压入原始栈中
		while help_stack != [] and current > help_stack[-1]:
			stack.append(help_stack.pop())
		# 此时current必小于辅助栈栈顶或辅助栈为空,current直接压入辅助栈即可
		help_stack.append(current)
	# 将辅助栈的元素依次压入原始栈,完成升序排序
	for i in range(len(help_stack)):
		stack.append(help_stack.pop())
	return stack
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值