数据结构实验之栈五:下一较大值(一)
题目描述
对于包含n(1<=n<=1000)个整数的序列,对于序列中的每一元素,在序列中查找其位置之后第一个大于它的值,如果找到,输出所找到的值,否则,输出-1。
输入
以后是 t 组输入:每组先输入n,表示本组序列的元素个数,之后依次输入本组的n个元素。
输出
每组输出按照本序列元素的顺序,依次逐行输出当前元素及其查找结果,两者之间以-->间隔。
示例输入
2
4 12 20 15 18
5 20 15 25 30 6
示例输出
12-->20
20-->-1
15-->18
18-->-1
20-->25
15-->25
25-->30
30-->-1
6-->-1
#include <stdio.h> #include<stdlib.h> #include <malloc.h> #define STACKSIZE 100100 struct node {int data;int next;int id;//位置的标记; }a[100100]; typedef struct {node *top,*base;int stacksize; }Stack;void initial(Stack &s)// 构造一个空栈S{s.base=(node*)malloc(sizeof(node)*STACKSIZE);if(!s.base) exit(-1);存储分配失败s.top=s.base;s.stacksize=STACKSIZE; } int Empty(Stack &s)//若栈为空栈,则返回1,否则 返回0; {if(s.base==s.top){return 1;}return 0; } void clean(Stack &s) // 重置S为空栈{s.top=s.base; } void pop(Stack &s,node &e) //若栈不空,则删除S的栈顶元素,并//用e返回其值, {if (!Empty(s)){s.top--;e=*s.top;} } void gettop(Stack &s,node &e)//用e返回S的栈顶元素 {e=*(s.top-1); } void push(Stack &s,node e) // 插入元素e为新的栈顶元素 {*s.top=e;s.top++; } int main() {int t,n;Stack s;//栈的定义;initial(s);//栈的初始化;while(scanf("%d",&t)!=EOF){while(t--){clean(s);//清空栈scanf("%d",&n);for(int j=1;j<=n;j++){scanf("%d",&a[j].data);a[j].id=j;//标记读入的位置;a[j].next=-1;//标记后一个数是-1if(Empty(s))push(s,a[j]);else{while(!Empty(s)){node e;gettop(s,e);//获得栈顶元素;int k=e.id;if(e.data<a[j].data)//数据比较;{a[k].next=a[j].data;pop(s,e);//比较完出栈;}elsebreak;}push(s,a[j]);//将下一个数进栈,重复操作;}}for(int i=1;i<=n;i++){printf("%d-->%d\n",a[i].data,a[i].next);}if(t!=0)printf("\n");}}return 0; }
数据结构实验之栈五:下一较大值(一)相关推荐
- 数据结构实验之栈三:后缀式求值
题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. 输入 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. 输出 求该后缀式所对应的算术表达式 ...
- SDUT 2133 数据结构实验之栈三:后缀式求值
后缀式求值的方法参见我的另一篇文章 把运算符变成表达式 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 ...
- sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
数据结构实验之栈与队列六:下一较大值(二) Time Limit: 150MS Memory Limit: 8000KB Submit Statistic Discuss Problem Descri ...
- 数据结构 实验三 栈的基本运算
栈的基本运算 任务一: 顺序栈的基本操作 任务描述: 本关任务:实现顺序栈的基本操作,包括栈的初始化.置空栈.进栈.出栈.判栈空.栈的输出(遍历)等. 相关知识: 为了完成本关任务,你需要掌握: - ...
- SDUT OJ 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss P ...
- 数据结构实验之链表五:单链表的拆分-sdut
数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
最新文章
- DEDE-Function ereg_replace() is deprecated in ..line 2
- amazeui页面分析之登录页面
- Dictionary Serializer(Dictionary 序列化)
- 《Redis设计与实现》之第十一章:AOF持久化
- 如何保留linux中yum安装后的rpm软件包
- iphone保修期多久_卖疯了!开发区9.9元起换iphone原厂电池!
- CSS3幻灯片制作心得
- lighttpd安装配置支持php
- Bootstrap-学习系列
- 如何在PHP中使用cURL连接到Tor隐藏服务?
- mangos服务器架构
- Glib2之spec编译打包rpm(九)
- OpenCV相机帧率低以及花屏问题
- laravel框架使用datatables
- [SPRD] 版本修改集锦
- 关于深度思考的一点总结
- 使用正则表达式提取文件中满足条件的内容
- springboot添加切面
- 我的世界java史莱姆生成条件_史莱姆 - Minecraft Wiki,最详细的官方我的世界百科...
- 机器视觉技术(总结)
热门文章
- 现代程序设计 (课程设计中, 征求意见稿)
- 顶级程序员的心得 Coders at Work (II)
- windows7系统损坏修复_【软件资讯】还在用win7?微软Windows 7系统正式停止技术支持...
- 解决:如何在Android Studio中找出自己项目文件的所在位置
- js foreach 跳出循环_VUE.js
- java字符转为数字_Java 判断字符串能否转化为数字的三种方法
- python十点半游戏代码_Python实现Pig Latin小游戏实例代码
- android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)
- grasp设计模式应用场景_grasp设计模式笔记回顾
- xxljob 配置文件_最详细的xxl-job java配置方式spring-boot