怎么使用栈完成全排列在信息中某一排插入

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我的sql语句如图,如何在insert的时候更新其中的project_id字段呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
直接给你个例子,相信你能看懂,insert into users (id,username,password) select null,username,'3333' from users where id=1
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
ON DUPLICATE KEY UPDATE 语法,这个要配合唯一索引使用
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
先插入insert 如果成功则
返回自增ID,再执行update 这样可以啊,执行2条SQL就行
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这是要写触发器么。。。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?面试算法:堆栈元素的在线排序 - 简书
面试算法:堆栈元素的在线排序
更详细的讲解和代码调试演示过程,请参看视频
给定一个存有整形数的堆栈,你能使用的操作有,peek 获得堆栈顶部元素的值但不把元素弹出堆栈,pop 把堆栈顶部的元素出栈,push 压入一个堆栈,empty 判断堆栈是否为空,要求你只能使用这几种操作,同时在不分配新内存的情况下,将堆栈中的元素从大到小排列,假定堆栈中,元素由栈底到栈顶如下:
stack: 1 3 5 4 2
排序后为:
这道题的麻烦点在于,我们不能分配新的内存,如果可以的话,我们可以先构造另一个堆栈,把原堆栈的元素全部弹到新堆栈中,同时记录下元素中的最大值,然后把最大值压入元堆栈,再把新堆栈中的所有元素除去其中的最大值压入原堆栈,这样一来,堆栈元素中的最大值就压入底部了,这个过程反复进行,最后就可以完成所需要的排序。
但题目有一苛刻之处在于,不能分配新内存,也就是我们不能分配另一个临时堆栈,所以我们必须另辟蹊径。
假设我们已经有了一个按照规则排好序的堆栈如下:
此时我们有遇到3,那么该怎么处理?办法就是先把1,2弹出栈,把3压入,然后再把2,1分别压入堆栈。问题在于,弹出堆栈的元素可能有好几个,题目要求
不能用new 分配新内存,所以当我们需要弹出多个元素时,这些弹出的元素怎么存放?我们这里可以采用一种递归调用的技巧,将弹出的元素存储在调用堆栈上,我们先看看代码:
private Stack&Integer& insert(Stack&Integer& s, int v) {
if (s.empty() == true || v &= s.peek()) {
s.push(v);
int t = s.pop();
insert(s, v);
s.push(t);
insert 的作用是把数值v插入已经排好序的堆栈s, 如果s是空的,或者要压入的数值小于栈顶元素,那么直接把该数值压入栈顶即可,如果数值大于栈顶元素,那么先把栈顶元素弹出存储在变量t中,变量t的内存来自当前的调用堆栈,然后再递归的调用insert,继续将数值v插入堆栈,由于堆栈s中的元素已经排好序,因此即使弹出s的栈顶元素,堆栈s剩下的元素仍然是排好序的,因此insert逻辑可以递归的运行下去。
根据例子,要把元素3插入堆栈,insert第一次调用时,会把栈顶元素1弹出,然后继续执行insert的函数逻辑,第二次调用时,再次把堆栈顶部的元素2弹出,然后再次执行insert函数逻辑。第三次执行insert函数时,堆栈顶部元素是4,此时直接把3压入栈顶,然后往回退出函数,回退时,分别把原来弹出的元素2,1,依次重新压入堆栈,最后元素3就会插入到堆栈中的恰当位置。
接下来的问题是,insert函数的调用需要保证传入的堆栈s,其中元素已经是排好序的,那么怎么满足这一点呢?实现堆栈排序的代码如下:
public Stack&Integer& sortByRecursion(Stack&Integer& s) {
if (s.empty() == true) {
int v = s.pop();
s = sortByRecursion(s);
s = insert(s, v);
上面代码的逻辑在于,如果一个堆栈是空的,那么它就已经是排好序的堆栈了,此时可以使用insert函数将元素插入堆栈,所以对堆栈排序时,现将栈顶元素弹出,把剩下的堆栈元素进行排序,排好序后,把原来栈顶元素使用insert重新插入堆栈即可。因此sortByRecursion的逻辑是一种递归调用,要将含有n个元素的堆栈进行排序,可以先把n-1个元素的堆栈排好序,然后把第n个元素通过调用insert插入即可,这个逻辑一直通过递归调用的方式往下走,知道堆栈为空,那么此时堆栈就已经是排好序的,于是直接将元素插入空堆栈。
由此整个算法的实现如下:
import java.util.S
public class StackSorter
public Stack&Integer& sortByRecursion(Stack&Integer& s) {
if (s.empty() == true) {
int v = s.pop();
s = sortByRecursion(s);
s = insert(s, v);
private Stack&Integer& insert(Stack&Integer& s, int v) {
if (s.empty() == true || v &= s.peek()) {
s.push(v);
int t = s.pop();
insert(s, v);
s.push(t);
程序入口处的代码为:
import java.util.R
import java.util.S
public class StackAndQuque {
public static void main(String[] args) {
Stack&Integer& s = new Stack&Integer&();
StackSorter sorter = new StackSorter();
Random r = new Random();
for (int i = 0; i & 5; i++) {
s.push(r.nextInt(10));
sorter.sortByRecursion(s);
上面代码先在堆栈s中压入若干个随机数,然后调用sortByRecursion进行排序,上面代码运行后,s中的元素可以由原来的无序转变为符合题目要求的有序排列。
这道题的解法思路有两大特点,一是利用递归调用的方式,将原来需要使用新内存来存储的信息,直接存储到调用堆栈上。第二是如同上一节解决汉诺塔的思路,要处理一个规模为n的问题,转换为先处理规模小一点的n-1个级别的问题,将大问题一路分解成小问题,直到小问题非常容易解决为止。
更详细的算法讲解和代码调试演示,请参看视频。
更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述
Java byte code
的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为啥要学汇编一个道理。我为啥要整理这些难记的知识 ? 因为公司用到了某为的一个据说极其牛逼的技术框架,但是某为不给源码,导致理解总是肤浅的。 要了解应用,唯有剥开...
从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗offer。我找的是java后台开发,把常见的问题分享给大家,有一些是自己的总结,有一些是网上借鉴的内容。希望能帮助到各位。预祝各位同学拿到自己心仪的offer...
1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。 1、一个&.java&源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个publ...
原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。...
近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受。经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了。总结下面试人过程中的感受,你也可以读到我们对简历、算法、性格、iOS 基础、底层知识的看法和一些常问的面试...
在爱情世界里,仿佛每个人都是蹒跚学步的孩子。这个世界是怎么了。女孩子总要求被关心,别爱。可是你不懂,你的爱是自私的,是不独立的。奋斗的女人更容易获得幸福。经济不独立的你,在男人眼中往往是附属品。爱一个人往往简简单单,联系不到一直打电话,晚回家总是催促,那不是爱,那是缺乏安全...
此诗当是李白晚年作品,全诗分为四段。 首段从“我本楚狂人”开始到“一生好入名山游”止。诗人以楚人陆通自比,点出了诗人不慕名利,放荡不羁的性格和寄情山水洒脱闲逸的情趣。 第二段应到“鸟飞不到吴天长。”句,是叙述远看庐山的高峻秀美以及名胜之多。此段,本人见所有版本在断句上,都把...
【大年初一,不能太过闲散啊,毕竟不能浪费这地理优势啊.So,久违的电影院~~来吧,走一遭~~ 这个筛选工作几天前就开始了,浏览影片名称以及预告片并兼顾初一的氛围之后, the Kung Fu Yoga is ready.】 初一毕竟不平凡,事多,人多,我错过了片头的5分钟,...
高中的时候你是否也暗恋过一个人?默默地为他做了许多……那些神秘又疯狂的暗恋小事……这是一个90后的17岁……追忆高考岁月,从相识到相识…… 《上课》 扭头看你 再扭头看你 下课了 《长高》 我在第一桌 你在第五桌 我要努力长高
Samsara去到了北京,一个六年前来过的地方。 初到的人脸上永远充斥着异样的光彩,疲惫的人来往穿梭,打着电话,脸上是掩不住的厌倦。叫卖的小贩利落地拾掇着给客人的什物件儿,Samsara站在车站的角落里静静地看着这一切。她不知道自己要干什么,她不懂快乐,她不懂金钱,她像个初...相关文章推荐
本篇内容包含
排序的介绍
排序的C的实现
排序的Java的实现
排序的时间复杂度的计算
(一)冒泡排序1、基本思想:两个数比较大小,较大的数下沉,较小的数冒起来2、实现步骤:这张图就是将数字12,35...
快速排序 及 归并排序
还是把基础数据结构复习一下吧,算法虽然简单,但是想把后面的思想完全领悟还是比较困难的。
这个是排序的三件套,快速排序,堆排序,归并排序。
快速排序:以第一个数为支点,把比他小的放前面,比他大的放后面。...
接上篇博文:
[C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
5.快速排序:
快速排序的核心思想是分而治之算法。所谓的分而治之,简单来说就是把...
堆排序(Heap Sort) 利用堆(一般为大根堆)进行排序的方法。它的基本思想是:将待排序的序列构造成一个大根堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素进行...
我们学习了最基础的三种排序,它们都有个共同点,
几种典型的排序算法,算法排序对象都为顺序表,还有一个基数排序的算法由于采用不同的存储结构就没有加在这个文件中,稍后会贴出其代码。
归并排序和快速排序前言:
前面三篇文章分别介绍了三种排序算法:冒泡排序、插入排序和选择排序。它们的实现思想都是基于排序问题本身产生的,时间复杂度都是θ(n^2)。
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
我们通常所说的排序算法往往指的是内部排序算...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)h->next=s;
s->next=h;
s->next=h;h->next=s;
s->next=h->h->next=s;
应该先将新元素的next
带头结点,选D
不带头结点 ,选B
注意:由于是后进先出的,所以每个进栈的数据的next 是指向 前一个进栈的数据的
这道题的注意点在头结点这,如果没有头结点就是c
插入,,在h后面插入
带头结点的情况下,可以按链表的头插法来插入s
这里带头结点
是关键字眼,如果没有看到这个,很有可能就选B了
这里的链栈是忽悠人的,不用考虑,直接s指向的节点所指向的下一个节点为头结点指向的下一个节点
头节点指向的下一个节点为s指向的节点
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
浙ICP备号-2
扫一扫,把题目装进口袋数据结构栈插入和删除的实现_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
数据结构栈插入和删除的实现
我有更好的答案
e:pop(int &e)
{ if (!empty())
{e=elem[--top];&}int main(){ a.display ()#include&iostream&class sqstack{private: } cout&&&显示队栈中的元素为:&&&elem[i] && cin&&&
cout&&&显示栈中的剩余元素为; }}void sqstack:::push(int e) { elem[top++]=e;
}void sqstack:;&gt:length() { } bool empty(){return top==0; sqstack a(100); a.push (e);; } cout&; cin&&x;
cout&&&出栈元素为:&; for(i=1;i&&&i&&&个数据:&&&endl:&& cout&&&输入要建立栈的长度:&&&=x;i++) {cout&&&请输入要入栈的&quot,e;=0;i-- ) {
cout& for(i=1;i&
&quot:&} void push(int e); void pop(int &e); void display();};int sqstack:;& cin&
&; } cout&x:display(){ for(int i=top-1;i&&=x;i++) {a.pop (e);
cout&&e&& cout&&&输入出栈元素个数,x; elem=new int[maxsize];
top=0; } ~sqstack(){delete []} int length();& int *&public: sqstack(int size) {maxsize=size
采纳率:24%
则对其空间进行扩展{ T *p=new T[maxsize+STACKINCREMENT];T&;class T&void SeqStack&}
int SeqStackEmpty()const/} elem[++top]=e::SeqStack(int size);class T&T& SeqStack&lt:
T *;exit(0);}}template&class T&&i&i++) p[i]=elem[i]; delete []exit(0);将栈清空
int SeqStackLength(){return top+1;&若栈空;&lt用模板表示的,则停止运行 return elem[top];}template&}///内存分配失败&存放栈元素的一维数组&#47::Pop(){if(SeqStackEmpty()) {cout&; elem=new T[maxsize];判断栈是否满,若满返回1,否则返回0
{return top==maxsize-1; }
T&SeqGetTop();
void Push(const T& e);
T& Pop();//T& SeqS;exit(0);}//若栈满;栈空&quot::SeqGetTop(){ if(SeqStackEmpty()){cout&lt:#define STACKINCREMENT 10template&class T&返回出栈值后在减一}template&lt:top(-1)::Push(const T& e){ if(SeqStackFull)
//&} for(int i=0;&栈空&SeqStack&/栈顶元素的数组位置& if(elem==0) {cout& class SeqStack{public:
SeqStack(int size),即栈中数据元素的个数
int SeqStackFull()
void SeqStackClear(){top=-1;}///求栈长度; 栈数组的容量};template&class T& elem=p;p=NULL; maxsize+=STACKINCREMENT;//T&;T&;;exit(0);} return elem[top--],maxsize(size){ if(maxsize&1) throw&stack capacity must be&0& if(!p) {cout&&&内存溢出&;~SeqStack(){delete []/判断栈是否为空,若是返回1,否则返回0{return top==-1
为您推荐:
其他类似问题
您可能关注的内容
数据结构的相关知识
换一换
回答问题,赢新手礼包

我要回帖

更多关于 用栈给字符串做全排列 的文章

 

随机推荐