每天一道算法题(13)——使用递归颠倒栈

本文介绍了一种利用递归颠倒栈的方法。通过两个递归函数实现:首先弹出并保存栈顶元素,然后递归颠倒剩余的栈;最后将保存的栈顶元素添加到已颠倒栈的底部,完成整个栈的颠倒。

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

       题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶


思路

        1.弹出并保存栈顶元素
        2.递归,颠倒剩余的栈
        3.将栈顶元素保存至栈底



代码
      
//使用递归法,逆转栈
template<typename T>
bool reverseStack(stack<T> &s){
	if(!s.empty())
		return false;
	T temp=s.top();
	s.pop();
	reverseStack(s);
	adBottom(s,temp);
	return true;
}

//某个元素,使用递归法,添加至栈底。
template<typename T>
void adBottom(stack<T> &s,T t){
	if(!s.empty())
		s.push(t);
	else{
		T temp=s.top();
	        s.pop();
		adBottom(s,t);
		s.push(t);
	}
}











转载于:https://www.cnblogs.com/engineerLF/p/5393029.html

### Python算法入门经典练习题目推荐 对于初学者来说,掌握一些经典的Python算法练习题是非常重要的。这些题目可以帮助理解基本的数据结构、控制流以及算法设计的思想。 #### 1. 排序与查找类问题 排序和查找是最常见的算法主题之一。以下是几个典型的例子: - **冒泡排序** 实现一个简单的冒泡排序算法,用于对数组中的元素按升序排列[^3]。 ```python def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr ``` - **二分查找** 编写一个函数,在已排序的列表中找到目标值的位置[^4]。 ```python def binary_search(arr, target): low, high = 0, len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` --- #### 2. 字符串处理类问题 字符串操作是编程中最常用的技能之一。以下是一些典型的问题: - **反转字符串** 给定一个字符串,将其字符顺序颠倒并返回新字符串[^1]。 ```python def reverse_string(s): return s[::-1] ``` - **判断回文字符串** 检查输入的字符串是否为回文(正读反读都相同)[^5]。 ```python def is_palindrome(s): return s == s[::-1] ``` --- #### 3. 数组与矩阵操作类问题 数组和矩阵的操作涉及许多实际应用,也是面试常考的内容。 - **二维数组转置** 将一个二维数组进行行列互换[^2]。 ```python def transpose(matrix): return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))] ``` - **移除重复项** 从列表中删除所有重复的元素,并保持原始顺序。 ```python def remove_duplicates(lst): seen = set() result = [] for item in lst: if item not in seen: seen.add(item) result.append(item) return result ``` --- #### 4. 动态规划与递归类问题 动态规划是一种高效的解决问题的方法,而递归则是其常用的技术手段。 - **斐波那契数列** 计算第n个斐波那契数。 ```python def fibonacci(n): if n <= 1: return n a, b = 0, 1 for _ in range(2, n+1): a, b = b, a+b return b ``` - **爬楼梯问题** 假设一个人每次可以走一步或者两步台阶,问有多少种不同的方式爬上n级台阶。 ```python def climb_stairs(n): if n <= 2: return n prev1, prev2 = 1, 2 for _ in range(3, n+1): current = prev1 + prev2 prev1, prev2 = prev2, current return prev2 ``` --- #### 5. 数据结构相关问题 熟悉数据结构有助于解决更复杂的算法问题。 - **链表反转** 定义一个单向链表节点类Node,并实现链表反转功能。 ```python class Node: def __init__(self, value=0, next=None): self.value = value self.next = next def reverse_linked_list(head): prev = None curr = head while curr: temp = curr.next curr.next = prev prev = curr curr = temp return prev ``` - **的应用——括号匹配** 验证一组括号序列是否合法。 ```python def isValid(s): stack = [] mapping = {&#39;)&#39;: &#39;(&#39;, &#39;}&#39;: &#39;{&#39;, &#39;]&#39;: &#39;[&#39;} for char in s: if char in mapping.values(): stack.append(char) elif char in mapping.keys(): if stack and stack[-1] == mapping[char]: stack.pop() else: return False return not stack ``` --- ### 总结 以上列举了几大类别的Python算法入门必刷题型,涵盖了排序、查找、字符串处理、数组操作、动态规划以及数据结构等内容。通过不断实践这些问题,能够显著提升算法思维能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值