首页 > 其他分享 >05_用一个栈实现另一个栈的排序

05_用一个栈实现另一个栈的排序

时间:2023-10-06 22:12:50浏览次数:33  
标签:cur 压入 05 一个 元素 排序 stack help

用一个栈实现另一个栈的排序

【题目】

一个栈中的元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

【解答】

将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur。

  • 如果cur小于或等于help的栈顶元素,则将cur直接压入help;
  • 如果cur大于help的栈顶元素,则将help的元素逐一弹出,逐一压入stack,直到cur小于或等于help的栈顶元素,再将cur压入help。

一直执行以上操作,直到stack中的全部元素都压入到help。最后将help中的所有元素逐一压入stack,即完成排序。

public static void sortStackByStack(Stack<Integer> stack) {
	Stack<Integer> help = new Stack<Integer>();
	while (!stack.isEmpty()) {
        // 取出stack栈的队头元素
        int cur = stack.pop();
        //确保help栈中暂存的元素一定要比cur的元素值要大
        while (!help.isEmpty() && help.peek() < cur) {
            stack.push(help.pop()); // 将值更小的元素压入Stack栈中
        }
        help.push(cur);
    }
    //经过上述操作之后,help中存放的元素从栈顶到栈底依次增加
    while (!help.isEmpty()) {
        stack.push(help.pop()); // 将help中的元素依次压入stack栈中,最终得到的即是题目所要求的
    }
}

最好理解这段代码的方式就是找几个数试一下,模拟一遍流程即可。

eg:依次向stack栈中压入54,18,71,46,24这五个元素,模拟基本代码的执行流程。

image-20231006220020775

标签:cur,压入,05,一个,元素,排序,stack,help
From: https://www.cnblogs.com/codingbao/p/17745163.html

相关文章

  • 05_猜大小游戏
    1.加减乘除取余#方法1root@bk:~/ckh#expr1+12root@bk:~/ckh#expr100-199root@bk:~/ckh#expr2*24root@bk:~/ckh#expr9/33root@bk:~/ckh#expr10%31root@bk:~/ckh#expr100-1000-900#方法2root@bk:~/ckh#echo$((3+1))4root@bk:~/ckh......
  • sqlserver递归排序
    主要介绍了sqlserver递归排序相关的知识,希望对你有一定的参考价值。此算法不支持无限递归,只支持指定最大层级,实际应用中,一般不会超过5级,sqlserver最大只支持100级。递归层级LevelOrder序号,每层级最大序号sequences,子级序号=父级序号+父级序号/最大序号即LevelOrder=p.LevelO......
  • 深入了解iPhone 15 Pro内部结构和技术组件338500537、TPS6565780、338500843、SN300
    TechInsights团队正在拆解iPhone15Pro,以揭示其中的创新,包括使用台积电3nm工艺的全新A17芯片,提供了深入了解iPhone15Pro内部结构和技术组件。NXPNFC控制器安全元件SN300:(SN300VUK)Apple/Cirrus逻辑音频放大器338500537TiAMOLED显示器电源TPS6565780KIOXIA256GBNAND闪存App......
  • # yyds干货盘点 # 盘点一个Python自动化办公实战实现数据汇总填充(方法四)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。下图是他的原始数据和他想得到的目标数据,如下所示:需要在标黄的两行里边进行相关操作。二、实现过程之前的文章中【莫生气】使用了openpyxl进行了实现,的确可......
  • 快速排序
    #include<algorithm>#include<functional>usingnamespacestd;intmain(){inta[]=(1,3,2,9,-4};sort(a,a+5);//从小到大排房sort(a,a+5,less<int>());//与上一条语句相同sort(a,a+5,greater<int>());//大到小排return0;......
  • 五年Android开发,在Boss上投了十几个简历,没有一个面试邀请......药丸了
    之前在浏览某论坛时,看到一名程序员发表了如下的吐槽:“坐标杭州,工作五年的Android开发者,技术水平尚可,但最近这边加班太严重了,考虑换一个岗位。然而,在Boss上投了十几个简历,完全没有合适的面试机会。简历是公开的,竟然没有一个公司对我感兴趣。相比之下,前年这个时候,电话邀约面试的电话......
  • 字符串排序
    方法1:直接用数组排序publicclassStringSort{publicstaticvoidmain(String[]args){String[]strings={"abc123","abc+1234","ababab--1"};//对每个字符串计算字母字符个数和数字字符个数,并按照字母数字比和字符串本身大小排序Arra......
  • 归并排序原理、演示及代码
    归并排序1.原理归并排序是一种排序算法,它通过将待排序的数组或列表递归分割成较小的子数组,然后将这些子数组合并以生成一个有序的数组。2.操作分割(Divide):将待排序的数组分成两个大致相等的子数组,或者将列表分成两部分。这个过程是递归的,直到每个子数组或子列表都只包含一个元......
  • 【C语言入门】快速排序函数的应用
    快速排序函数qsortvoidqsort(void*base,typenitems,typesize,int(cmp)(constvoid*p1,constvoid*p2));参数说明:base  指针要排序的数组的首元素指针nitems  数组元素的总个数size  数组中每一个元素的字节大小cmp  函数指针(用来比较两个元素的函数)比......
  • 为什么减去这两个纪元毫秒值(在1927年)会得到一个奇怪的结果?
    内容来自DOChttps://q.houxu6.top/?s=为什么减去这两个纪元毫秒值(在1927年)会得到一个奇怪的结果?在Java中,Date对象的getTime()方法返回的是从1970年1月1日00:00:00GMT开始的毫秒数。当你解析日期字符串时,这些毫秒数是基于GMT的。然而,你的程序运行的环境时区是Asia/Shanghai,其......