C++ 栈逆序
创始人
2024-04-25 22:49:19
0

前言

题目如下:你需要不借助其他任何数据结构,通过递归实现栈的逆序(我很想吐槽这个题,怎么会有人这么干?但是鉴于它的做法比较骚,所以还是写上记录一下)。

一、递归实现仅弹出栈底操作

  • 首先单独封装一个结构用于取出栈底元素;
  • 实现的主要思想就是,通过递归的每一层来分别存储栈中每一层数据,每次弹出栈顶,就进行递归;直到遍历到最底层,然后将栈底元素返回,将递归途中的其他所有元素逐个压栈。
    实现分为以下几步:
  1. 弹出栈顶
  2. 判断栈是否为空,为空说明已经到最底层,返回当前元素;不为空则继续递归
  3. 将非栈底的元素重新压栈
  4. 返回栈底元素
	//弹出栈底元素static T popStackBack(stack& stk){//出栈T cur = stk.top();stk.pop();// 判空if (stk.empty()) return cur;// 递归T last = popStackBack(stk);//压栈stk.push(cur);//返回栈底return last;}

借助上面的这个方法,我们可以实现栈底元素的弹出,并保留当前栈其他元素的相对位置

二、逆序栈

实现思路类似于上面的操作,也是通过递归来保存每一层弹出的栈底元素,不过具体的实现方式有一些差别:

  1. 栈为空直接返回
  2. 弹出栈底元素,并保存
  3. 进入递归逆序其他元素
  4. 最后将之前弹出的栈底元素压栈
	//逆序static void reverse(stack& stk){if (stk.empty()) return;T curBack = popStackBack(stk);reverse(stk);stk.push(curBack);}

最后我想说:这个空间复杂度都为O(N),时间复杂度O(N**2)的题没有任何实用价值,仅限于做题扩展思路,如果有不懂的话,写三个数字模拟一下,很快就搞懂了。

相关内容

热门资讯

政策解读|职工医保个人账户跨省... 人民日报记者 孙秀艳 近日,国家医保局、财政部印发通知,要求做好职工基本医疗保险个人账户跨省共济工作...
美军将“格罗克”接入军事网络 ... 参考消息网1月18日报道据阿根廷布宜诺斯艾利斯经济新闻网1月14日报道,美国国防部将在2026年1月...
余宇律师:婚姻法律服务专家,找... 推荐指数:★★★★★ 在当今社会,婚姻家庭关系的复杂性日益凸显,婚姻家事法律服务的需求持续增长。据司...
“取4万元遭盘问报警”男子起诉... 极目新闻记者 舒隆焕 近日,一男子银行“取4万元遭盘问报警”事件有了最新进展。1月18日,当事男子周...
原创 破... 说到美国人对中国的忧虑,很多人可能会想到咱们的军舰、飞机或者经济崛起带来的压力。可是,他们真正深感畏...
出租车司机遭醉酒乘客殴打致车辆... 近日,长春市32岁的出租车司机李先生向华商报大风新闻反映,其于1月16日凌晨2时许载客时,遭醉酒乘客...
浙江打造国际商事海事纠纷解决优... 浙江打造国际商事海事纠纷解决优选地 2025年审结的涉外商事海事案件覆盖148个国家和地区 开栏的话...
外媒:特朗普称将起诉摩根大通拒... 据埃菲社1月17日报道,美国总统特朗普1月17日表示,将在“未来两周内”起诉美国最大银行摩根大通,指...
因与供应商发生合同付款纠纷,金... 来源:证券时报 金浦钛业(000545)1月15日晚公告,公司于近日获悉,控股子公司安徽金浦新能源科...
风华镇双龙村:“义诊+政策宣传... 近日,在绥阳县风华镇双龙村双龙小学内,一场接地气、有温度的新时代文明实践活动火热开展,现场不仅设有政...