4.借助一个栈空间,将一个栈进行进行排序(以整型元素为例,从栈顶到栈底依次递增排序)

分析:借助一个栈空间(这里我们称为辅助栈),将目标栈中的元素按从栈顶到栈底依次递减的顺序添加到辅助栈中,然后将辅助栈中的元素逐个弹出并压入目标栈即可。

思路:先申请一个辅助栈helpStack,然后弹出目标栈的栈顶元素top,此时如果helpStack为空则直接将top压入helpStack,否则将helpStack的栈顶元素与top进行比较,如果top大于等于helpStack的栈顶元素大则直接将top压入helpStack,反之将helpStack栈顶元素弹出并压入目标栈中,让top与此时的helpStack栈顶元素进行比较,直至top小于helpStack的栈顶元素或者helpStack为空时,将top元素压入helpStack。以上整个操作当目标栈中元素全部弹出并压入helpStack后结束。此时helpStack栈中的元素从栈顶到栈底依次递减,然后将helpStack栈元素弹出并添加到目标栈中,直到helpStack栈为空,程序结束。

附上Java代码:

class SortingStack{
    public void ascendingSort(Stack<Integer> stack){
        Stack<Integer> helpStack=new Stack<>();//辅助栈
        while(!stack.isEmpty()){
            Integer top=stack.pop();
     /* 下面的注释部分是依思路中的文字写的,当写完后发现while循环已经包括了helpStack为空的情况,所以可以进一步优化如下*/
       //     if(helpStack.isEmpty()){
       //         helpStack.push(top);
        //    }else {
                while (!helpStack.isEmpty() && helpStack.peek() > top) {
                    stack.push(helpStack.pop());
                }
                helpStack.push(top);
       //     }
        }
        while(!helpStack.isEmpty()){
            stack.push(helpStack.pop());
        }
    }
}

原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10139665.html

时间: 2024-07-31 21:24:53

4.借助一个栈空间,将一个栈进行进行排序(以整型元素为例,从栈顶到栈底依次递增排序)的相关文章

定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数:然后按顺序每五个数求出一个平均值,放在另一个数组中并输出. var arr = []; var NewArr = []

关于栈空间和堆空间的问题

操作系统对于内存的两种管理方式 如鹏网 <C语言也能干大事>http://www.rupeng.com/Courses/Index/12 第三章透彻讲指针 之  第 15 节: 栈空间 平时我们定义的变量都是分布在栈空间里,如下面的程序所示 1 #include <stdio.h> 2 int main(int argc, char *argv[]) 3 { 4 int i=5; 5 char s[] = "afasdfsfwfw"; 6 return 0; 7

linux查看修改线程默认栈空间大小(ulimit -s)

linux查看修改线程默认栈空间大小 ulimit -s 1.通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2.通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M 3.可以在/etc/rc.local 内 加入 ulimit -s 102400 则可以开机就设置栈空间大小 4.在/etc/security/limits.conf 中也可以改变栈空间大小: #<domain> &l

将一个任意整数插入到已排列的整型数组中,插入后,数组中的数仍保持有序

实现代码: package homework; import java.util.Scanner; public class HomeWork { public static void main(String[] args) { //將输入的数字插入到一个有序的数组中的合适位置 Scanner input = new Scanner(System.in); System.out.println("请输入一个数字:"); int num = input.nextInt(); //有序的整

你必须知道的指针基础-8.栈空间与堆空间

一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈. 2.堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表. 3.全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻

011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值. push,pop和min函数的时间复杂度都为O(1). 看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否? 如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值. 可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办. 既然只用一个变量没法解决这个问题,那我们就增加变量.如果说每个结点除了保存当前的 值, 另外再保存一个从该结点到栈底的

堆空间 栈空间

一个由C/C++编译的程序占用的内存分为以下几个部分:1.栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈.2.堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表.3.全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一

Linux栈空间检测代码

今天终于知道linux栈空间了.因为写了个简单程序,可以让linux的栈空间耗尽,然后出现core dumped,即栈溢出 代码如下: #include <stdio.h> void overFlow() { long i; printf("&i  : %p\n",&i); overFlow(); } int main() { OverFlow(); } 运行程序 ./out > out.log 栈地址是从高到低,所以用第一个减去最后一个地址,就能得到

FreeRTOS 查询任务 剩余的栈空间的 方法

From:http://www.cnblogs.com/suozhang/p/5301054.html 1.官方文档提供了   函数  用来查询  任务 剩余   栈 空间,首先是看官方的文档解释(某位大神 翻译 的 官方 文档.) 参数解释:     xTask:被查询任务的句柄——欲知如何获得任务句柄,详情请参见API 函数xTaskCreate()的参数pxCreatedTask.如果传入 NULL 句柄,则任务查询的是自身栈空间的高水线. 返回值: 任务栈空间的实际使用量会随着任务执行和