当前位置:
首页 >
sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
发布时间:2025/4/16
63
豆豆
生活随笔
收集整理的这篇文章主要介绍了
sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
数据结构实验之栈与队列五:下一较大值(一)
Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic DiscussProblem Description
对于包含n(1<=n<=1000)个整数的序列,对于序列中的每一元素,在序列中查找其位置之后第一个大于它的值,如果找到,输出所找到的值,否则,输出-1。
Input
输入有多组,第一行输入t(1<=t<=10),表示输入的组数;
以后是 t 组输入:每组先输入n,表示本组序列的元素个数,之后依次输入本组的n个元素。
Output
输出有多组,每组之间输出一个空行(最后一组之后没有);
每组输出按照本序列元素的顺序,依次逐行输出当前元素及其查找结果,两者之间以-->间隔。
Example Input
2 4 12 20 15 18 5 20 15 25 30 6Example Output
12-->20 20-->-1 15-->18 18-->-120-->25 15-->25 25-->30 30-->-1 6-->-1Hint
本题的数据量小、限时要求低,可以不用栈来完成。
这道题在开始输入的时候就进行对数据进行处理,当输入每一组数据时,当栈为空时直接把该数据进栈,输入数据时不为空,则进行和栈中的数据进行比较....代码中有详解
#include <bits/stdc++.h> using namespace std;//用来声明s栈struct sqstack {int num;//用于记录输入的每一组数据的大小,从而好与后面数据进行比较大小int id,next;//id是为了记录输入的这个数据是这组数据的第几个,从而便于对a数组中的next的值进行赋值时找到是数组中在那个位置上(id位置)//next是用来存储比num数值大的那一个数 }; int compear() {sqstack a[1000],p,t;//a数组到最后是用来进行输出的对象stack<struct sqstack>s;//s栈int n;scanf("%d",&n);for(int i=0;i<n;++i){cin>>a[i].num;a[i].id=i;a[i].next=-1;//后面会对其进行更改值,代表比他大的第一个值,如果没有改变说明这组数据中没有比他大的p=a[i];if(s.empty())//遇到空时直接对其进行进栈s.push(p);else{while(!s.empty())//不为空时,同时如果栈中有多个数据时会进行循环,直到为空或者找不到比这个数值大的{t=s.top();//栈顶元素 if(p.num>t.num){a[t.id].next=p.num;//t.id代表栈顶元素在这组数据的位置,同时也代表在a数组中代表的位置,在此把比他大的值存入到next中,s.pop();//已经为a[i-1]找到了第一个比他大的值,所以出栈就行啦,}elsebreak;//如果找不到比t.num大的值得话,最终就会循环}s.push(p);//a[i]不比a[i-1]大的话就结束,再把a[i]进栈}}for(int i=0;i<n;++i)printf("%d-->%d\n",a[i].num,a[i].next);return 0; } int main() {int t;scanf("%d",&t);while(t--){compear();if(t)printf("\n");} }《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读
总结
以上是生活随笔为你收集整理的sdut-3332 数据结构实验之栈与队列五:下一较大值(一)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: sdut 2134 数据结构实验之栈与队
- 下一篇: sdut 3333 数据结构实验之栈与队