数据结构实验之栈六:下一较大值(二)
2016-07-28 19:54
423 查看
数据结构实验之栈六:下一较大值(二)
Time Limit: 150MS Memory limit: 8000K
题目描述
对于包含n(1<=n<=100000)个整数的序列,对于序列中的每一元素,在序列中查找其位置之后第一个大于它的值,如果找到,输出所找到的值,否则,输出-1。输入
输入有多组,第一行输入t(1<=t<=10),表示输入的组数;以后是 t 组输入:每组先输入n,表示本组序列的元素个数,之后依次输入本组的n个元素。
输出
输出有多组,每组之间输出一个空行(最后一组之后没有);每组输出按照本序列元素的顺序,依次逐行输出当前元素及其查找结果,两者之间以-->间隔。
示例输入
24 12 20 15 185 20 15 25 30 6
示例输出
12-->2020-->-115-->1818-->-120-->2515-->2525-->3030-->-16-->-1
提示
本题数据量大、限时要求高,须借助栈来完成。来源
示例程序
比较完整的栈的解题#include<stdio.h> #include<stdlib.h> #include<memory.h> #define stackmax 500 #define stacknum 500 typedef struct { int num; int data; int next; }node; typedef struct { node *top; node *base; int stacksize; }qstack; void initqstack(qstack &s) { s.base = (node *)malloc(stackmax*sizeof(node)); if(!s.base) { exit(0); } s.top = s.base; s.stacksize = stackmax; } void pushqstack(qstack &s,node e) { if(s.top - s.base >= s.stacksize) { s.base = (node *)realloc(s.base, (s.stacksize +stackmax)*sizeof(node)); if(!s.base) { exit(0); } s.top = s.base + s.stacksize; s.stacksize = stackmax + stacknum; } *s.top++ = e; } int qstackempty(qstack &s) { if(s.top == s.base) { return 0; } else { return 1; } } int main() { int t,n; qstack s; node arr[100500],str; scanf("%d",&t); while(t--) { initqstack(s); scanf("%d",&n); for(int i = 0;i < n;i++) { scanf("%d",&arr[i].data); arr[i].num = i; arr[i].next = -1; if(!qstackempty(s)) { pushqstack(s,arr[i]); } else { while(qstackempty(s)) { str = *(s.top-1); if(str.data < arr[i].data) { arr[str.num].next = arr[i].data; str = *s.top--; } else break; } pushqstack(s,arr[i]); } } for(int i = 0;i < n;i++) { printf("%d-->%d\n",arr[i].data,arr[i].next); } printf("\n"); } return 0; }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- ASP编码必备的8条原则
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- 数据结构之Treap详解
- C语言安全编码之数值中的sizeof操作符
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- VC中BASE64编码和解码使用详解
- 计算机中的字符串编码、乱码、BOM等问题详解
- Base64编码解码原理及C#编程实例
- C#编码好习惯小结
- javascript编码的几个方法详细介绍