014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)
敲代码将一个栈按升序排序。
对这个栈是怎样实现的,你不应该做不论什么特殊的如果。
程序中能用到的栈操作有:push | pop |isEmpty
最easy想到的就是优先队列来做此题。easy实现。
另外我们能够再用一个栈来实现栈的升序排列。
优先队列:
//优先队列来实现
void sortStack(std::stack<int>& vStk)
{
std::priority_queue<int, std::vector<int>, std::greater<int>> Queue;
while (!vStk.empty())
{
Queue.push(vStk.top());
vStk.pop();
} while (!Queue.empty())
{
vStk.push(Queue.top());
Queue.pop();
}
}
附加栈来实现:
//附加一个栈来实现
void sortStack_(std::stack<int>& vStk)
{
std::stack<int> Tmp;
while (!vStk.empty())
{
int Top = vStk.top();
vStk.pop();
while (!Tmp.top() && Top < Tmp.top())
{
vStk.push(Tmp.top());
Tmp.pop();
}
Tmp.push(Top);
}
}
另外一种算法有个极端的測试列子:假设原来栈的数据底部到顶部是从小到大的。比如:
1 2 3 4 5 6 7
那么Tmp每次push一个不同的数就要清空栈中的全部数据。比方某时刻
vStk:1 2 3 4 5
Tmp:6 7
当Tmp要push 5的时候就要清空6 7,然后在push5,这时候vStk栈的数据添加:
vStk: 1 2 3 4 7 6
Tmp: 5
014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)的更多相关文章
- NOIP2008双栈排序[二分图染色|栈|DP]
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- 积极主动敲代码,使用Junit学习Java程序设计
积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...
- 华为OJ—火车进站(栈,字典排序)
http://career-oj.huawei.com/exam/ShowSolution?method=SolutionApp&id=2282 给定一个正整数N代表火车数量,0<N&l ...
- 使用Alcatraz为Xcode安装XActivatePowerMode插件, 从此敲代码逼格大大滴~
Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件.模版以及颜色配置的工具. 关于Alcatraz的安装,这里有一篇不错的博文,请参考安装:http://www.cnb ...
- 数组升序排序的方法Arrays.sort();的应用
package com.Summer_0421.cn; import java.util.Arrays; /** * @author Summer * 数组升序排序的方法Arrays.sort();应 ...
- 使用Java对字符串进行升序排序
Java对字符串的很多API和功能是JavaWeb能广泛发展的基础,下面是一道经典的字符串操作题,需要边查JAVASE的API对每个步骤进行操作. 题目:给一个字符串,"34 12 -8 0 ...
- 敲代码非常难之logstash之file input插件实现分析
版权声明:本文为横云断岭原创文章,未经博主同意不得转载.微信公众号:横云断岭的专栏 https://blog.csdn.net/hengyunabc/article/details/25665877 ...
- c#:对两个字符串大小比较(不使用c#/java内部的比较函数),按升序排序
题目:首先需要实现一个函数:两个字符串大小比较(不得使用c#/java系统函数)的自定义函数:之后对一个字符串数据进行按升序排序(在排序过程中使用字符串大小比较时,使用自定义的字符串大小比较函数). ...
- 20145314郑凯杰 《Java程序设计》第9周学习总结 积极主动敲代码
20145314郑凯杰 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 ①JDBC(Java DataBase Connectivity) 即java数据库连接,是一种用于 ...
随机推荐
- 前端读者 | 从一行代码里面学点JavaScript
本文来自 @张小俊128:链接:http://www.html-js.com/article/A-day-to-learn-from-a-line-of-code-inside-the-JavaScr ...
- centos7.5安装opendesktop
1.下载地址 http://gnome-look.org/ 2.安装 chmod +x opendesktop-app-3.1.3-1-x86_64.AppImage ./opendesktop-ap ...
- python模块安装路径
Unix(Linux): prefix/lib/pythonX.Y/site-packages 默认路径:/usr/local/lib/pythonX.Y/site-packages 另外,在Unix ...
- php smtp发送邮件功能
<?php header("Content-Type: text/html; charset=utf-8"); class smtp { /* Public Variable ...
- Win7 + VirtualBox + CentOS (服务器版 无桌面) 使用共享文件夹
http://jingyan.baidu.com/article/b2c186c8ffb607c46ff6ff61.html
- Single Number III(LintCode)
Single Number III Given 2*n + 2 numbers, every numbers occurs twice except two, find them. Example G ...
- Flask实战第56天:板块管理
cms布局 编辑 cms_boards.html {% block main_content %} <div class="top-box"> <button c ...
- 【线性基】hdu3949 XOR
给你n个数,问你将它们取任意多个异或起来以后,所能得到的第K小值? 求出线性基来以后,化成简化线性基,然后把K二进制拆分,第i位是1就取上第i小的简化线性基即可.注意:倘若原本的n个数两两线性无关,也 ...
- 【组合数】【乘法逆元】 Codeforces Round #404 (Div. 2) D. Anton and School - 2
http://codeforces.com/blog/entry/50996 官方题解讲得很明白,在这里我复述一下. 枚举每个左括号,考虑计算一定包含其的简单括号序列的个数,只考虑其及其左侧的左括号, ...
- 【动态规划去除冗余】NOIP2010-乌龟棋
[题目大意] [思路] 最简单的思路是五维数组,但是当前走到的步数由已经取到的卡片决定,所以只需要四维.本来想要改一个滚动数组的,但是好像没有滚起来,算了(ノ`Д)ノ. 在学校要晚自习到21:15,回 ...