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

Time Limit: 150MS Memory Limit: 8000KB
Submit Statistic Discuss

Problem Description

对于包含n(1<=n<=100000)个整数的序列,对于序列中的每一元素,在序列中查找其位置之后第一个大于它的值,如果找到,输出所找到的值,否则,输出-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

本题数据量大、限时要求高,须借助栈来完成。

解题策略和上一道题一样,在这儿那位小哥哥只是借用建立链形队列时用到的数据结构。

http://blog.csdn.net/horizonhui/article/details/78113255

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100000
typedef int status;
typedef struct node
{int data;int next;int pos;
}elemtype;
typedef struct
{elemtype *base;elemtype *top;
} Sqstack;
struct node p[100005];
status isEmpty(Sqstack &S)
{if(S.top == S.base)return true;elsereturn false;
}
void initStack(Sqstack &S)
{S.base = new elemtype[MAXSIZE];S.top = S.base;
}
elemtype getTop(Sqstack &S)
{return *(S.top-1);
}
void Push(Sqstack &S, elemtype e)
{*S.top++ = e;
}
elemtype Pop(Sqstack &S, elemtype &e)
{return e = * --S.top;
}
void clear(Sqstack &S)
{S.base = S.top;
}
int main()
{int t, n;scanf("%d", &t);while(t--){Sqstack S;initStack(S);scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d", &p[i].data);p[i].pos = i;p[i].next = -1;if(isEmpty(S))Push(S, p[i]);else{while(!isEmpty(S)){struct node a = getTop(S);if(a.data < p[i].data){p[a.pos].next = p[i].data;Pop(S, a);}elsebreak;}}Push(S, p[i]);}for(int i=0;i<n;i++){printf("%d-->%d\n", p[i].data, p[i].next);}if(t>=0)printf("\n");}return 0;
}

sdut 3333 数据结构实验之栈与队列六:下一较大值(二)相关推荐

  1. sdut 2088 数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  2. sdut 1479 数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九:行编辑器 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  3. sdut 3335 数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...

  4. sdut 2134 数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  5. 数据结构实验之栈与队列三:后缀式求值

    Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output ...

  6. F - 数据结构实验之栈与队列六:下一较大值(二)

    理解:这道题目还是很不错的,一般来说,这道题用链表或者数组都是可以做的,分析发现n已经到达1e5,所以用双重循环不合适,用栈优化,原来每次都是从前往后判断,第2个数要和后面所有的比较,现在直接从后往前 ...

  7. C - 数据结构实验之栈与队列三:后缀式求值

    Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output ...

  8. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

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

    数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...

最新文章

  1. arm中断保护和恢复_ARM中断异常处理的返回
  2. 全球Top1000计算机科学家h指数发布,数据院院长Philip S. Yu上榜(附完整名单)...
  3. python的下载和安装步骤-PyCharm下载和安装详细步骤
  4. BZOJ-3505-数三角形-CQOI2014
  5. mysql 共享锁和排他锁 意向锁 记录锁 Gap Locks Next-Key Locks 插入意向锁介绍
  6. python处理网络文字流,设置为utf8编码
  7. JAVA API 中文版
  8. springboot响应结果超长(7.8M)浏览器无法接收
  9. 利用webBrowser来实现自动登录网站
  10. mysql 查询简单记忆_mysql 函数大全-简单的总结,便于记忆
  11. 系统找不到指定的文件。 : No installed service named Apache
  12. 屏幕中间html滚动字幕,Gom引擎屏幕中间滚动大字及屏幕其他信息滚动条脚本实例...
  13. word中如何删除某一页上的页眉
  14. 中国农大计算机保研,中国农业大学2021届保研情况
  15. JavaFX: Alert 弹窗
  16. 短视频后期要做哪些内容?注意细节才能做出优质短视频
  17. CAN bus的移植
  18. 微信聊天,对方回复“哦”怎么办?学会这3个技巧,永不尬聊
  19. 如何判断用户输入的邮箱格式是否正确?
  20. 截图工具因为计算机无法使用,win10系统截图工具无法使用提示“当前未在计算机上运行”的修复方案...

热门文章

  1. C#会重蹈覆辙吗?系列之2:反射及元数据的性能问题
  2. linux内核中的GPIO系统之(1):软件框架
  3. springmvc请求参数获取(自动绑定)的几种方法
  4. linux/unix编程手册-56_60
  5. Linux下配置汇编编译器NASM和bochs模拟器
  6. 工作流编程循序渐进(3:While活动)
  7. 你的网站添加X-UA-Compatible meta标签了吗?
  8. Bert-as-Service库Embedding句子
  9. Hive用户权限管理理解
  10. (转载)Hadoop2.7.1配置