欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

sdut-3332 数据结构实验之栈与队列五:下一较大值(一)

发布时间:2025/4/16 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 sdut-3332 数据结构实验之栈与队列五:下一较大值(一) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

数据结构实验之栈与队列五:下一较大值(一)

Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss

Problem 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 6

Example Output

12-->20 20-->-1 15-->18 18-->-120-->25 15-->25 25-->30 30-->-1 6-->-1

Hint

 本题的数据量小、限时要求低,可以不用栈来完成。

这道题在开始输入的时候就进行对数据进行处理,当输入每一组数据时,当栈为空时直接把该数据进栈,输入数据时不为空,则进行和栈中的数据进行比较....代码中有详解

#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 数据结构实验之栈与队列五:下一较大值(一)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。