PTA数据结构与算法题目集(中文) 7-19

PTA数据结构与算法题目集(中文)  7-19

7-19 求链式线性表的倒数第K项 (20 分)
 

给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。

输入格式:

输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。

输出格式:

输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL

输入样例:

4 1 2 3 4 5 6 7 8 9 0 -1

输出样例:

7
题目分析:看到高效就想用数组来 因为数组按秩查找是相当快的 后面搜了一下别人的做法 更好
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<malloc.h>
 4 
 5 int Size;
 6 int main()
 7 {
 8     int k;
 9     int*Array = (int*)malloc(sizeof(int) * 1000000);
10     scanf("%d", &k);
11     while (1)
12     {
13         int num;
14         scanf("%d", &num);
15         if (num == -1)
16             break;
17         Array[Size++] = num;
18     }
19     k = Size - k;
20     if (k <0||k>=Size)
21         printf("NULL");
22     else
23         printf("%d", Array[k]);
24     free(Array);
25     return 0;
26 }
View Code

别人的做法

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<malloc.h>
 4 
 5 
 6 int main()
 7 {
 8     int k=0;
 9     int Size=0;
10     scanf("%d", &k);
11     if (k <=0)
12     {
13         printf("NULL");
14         return 0;
15     }
16     int*Array = (int*)malloc(sizeof(int) * k); //只需存k个数
17     int Flag = 0;
18     while (1)
19     {
20         int num;
21         scanf("%d", &num);
22         if (num == -1)   //当输入为-1时退出
23             break;
24         Array[Size++] = num;
25         if (!Flag && Size >= k)
26             Flag = 1;
27         Size%=k;
28     }
29     if (!Flag)
30         printf("NULL");
31     else
32         printf("%d", Array[Size]);
33     free(Array);
34     return 0;
35 }
View Code

猜你喜欢

转载自www.cnblogs.com/57one/p/11626881.html