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

栈的反转

实现栈的逆序,但是只能使用递归函数和栈本身的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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java编程考试常出现的题型包括以下几种: 1. 字符串操作题:要求学生实现字符串的常见操作,比如字符串的拼接、、替换、查找等。此类题目考察学生对字符串的基本掌握程度以及对字符串操作方法的熟练度。 2. 线性表、、队列和链表题:考察学生对这些数据结构的理解和熟练应用能力,比如实现这些数据结构的基本操作、应用场景分析等。 3. 树结构题:要求学生实现二叉树的遍历、查找等操作,或者实现树的相关算法,比如构建哈夫曼树等。 4. 排序算法题:要求学生实现常见的排序算法,比如冒泡排序、快速排序、堆排序、归并排序等,并分析其时间复杂度。 5. 查找算法题:要求学生实现常见的查找算法,比如二分查找、哈希查找等,并分析其时间复杂度。 6. 分治算法题:要求学生实现常见的分治算法,比如归并排序、快速排序等,并分析其时间复杂度。 以下是一些示例题目及其答案: 1. 字符串操作题: 题目:将一个字符串中所有的空格替换为"%20"。 答案:可以先遍历字符串,记录空格的数量,然后计算出替换后的字符串长度,从后向前进行替换。 2. 线性表题: 题目:实现一个,要求支持入、出和获取顶元素的操作。 答案:可以使用数组或链表来实现,入操作即在顶插入元素,出操作即从顶删除元素,获取顶元素操作即返回顶元素。 3. 树结构题: 题目:实现一个二叉树的前序遍历。 答案:前序遍历的顺序是根节点、左子树、右子树。可以使用递归或者来实现前序遍历。 4. 排序算法题: 题目:实现一个快速排序算法。 答案:快速排序的基本思路是选择一个基准元素,将小于基准元素的数放在其左边,大于基准元素的数放在其右边,然后对左右两部分分别递归进行快速排序。时间复杂度为O(nlogn)。 5. 查找算法题: 题目:实现一个二分查找算法。 答案:二分查找的基本思路是将数组分成左右两部分,若查找元素小于中间元素,则在左半部分继续查找,否则在右半部分查找,直到找到或者查找区间为空。时间复杂度为O(logn)。 希望这些信息能够对你有所帮助,祝你考试顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值