資料結構實驗之棧與佇列六 下一較大值(二)

2021-08-22 05:52:07 字數 1483 閱讀 7548

problem description

對於包含n(1<=n<=100000)個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到的值,否則,輸出-1。

input

輸入有多組,第一行輸入t(1<=t<=10),表示輸入的組數;

以後是 t 組輸入:每組先輸入n,表示本組序列的元素個數,之後依次輸入本組的n個元素。

output

輸出有多組,每組之間輸出乙個空行(最後一組之後沒有);

每組輸出按照本序列元素的順序,依次逐行輸出當前元素及其查詢結果,兩者之間以-->間隔。

sample input

2

4 12 20 15 18

5 20 15 25 30 6

sample output

12-->20

20-->-1

15-->18

18-->-1

20-->25

15-->25

25-->30

30-->-1

6-->-1

hint

本題資料量大、限時要求高,須借助棧來完成。

#include

#include

#define stackmax 100000

#define stacknum 100000

typedef int elemtype;

int a[100001],b[100001];

typedef struct

sqstack;

void initstack(sqstack *s)

//棧的初始化

void push(sqstack *s,int e)

*(s->top)=e;

s->top++;

}//入棧操作

int pop(sqstack *s)

//出棧操作

void f(sqstack *s,int a,int b,int n)

//與棧頂元素相比較,若該資料小於棧頂元素,則其後面的較大值為棧頂元素,賦值給b陣列,然後將該資料壓入棧中

else

//否則,在棧非空的情況下,彈出棧頂元素,直到找到比其小的資料,若棧為空了。則說明沒有比其大的資料,所以將-1賦值給b陣列,然後將此資料壓入到棧中,再進行下一輪的比較

}for(i=1; i<=n; i++)

printf("%d-->%d\n",a[i],b[i]);//按格式輸出

}int main()

push(&s,a[n]);//將棧頂元素置為最後輸入的資料,因為是從前往後找,最後找到最後輸入的

b[n]=-1;//最後乙個元素肯定沒有較大值,所以將-1賦值給b陣列

f(&s,a,b,n);

if(t!=0) printf("\n");//若非最後一組,多輸出一行空格,要注意判斷是否為最後一組的條件是t是否為零,而不是一}}

return 0;

}

資料結構實驗之棧與佇列六 下一較大值(二)

time limit 150ms memory limit 8000kb submit statistic problem description 對於包含n 1 n 100000 個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到的值,否則,輸出 1。...

資料結構實驗之棧與佇列六 下一較大值(二)

資料結構實驗之棧與佇列六 下一較大值 二 time limit 150 ms memory limit 8000 kib problem description 對於包含n 1 n 100000 個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到的值,否...

資料結構實驗之棧與佇列六 下一較大值(二)

problem description 對於包含n 1 n 100000 個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到的值,否則,輸出 1。input 輸入有多組,第一行輸入t 1 t 10 表示輸入的組數 以後是 t 組輸入 每組先輸入n,表示本...