1-6 求链式线性表的倒数第k项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
我的代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 0x7fffffff
typedef int Position;
typedef int Element;
typedef struct LNode *List;
struct LNode
{
Element data[MAXSIZE];
Position last;
};
List MakeEmpty();
void Insert(List l,Element x,Position p);
int Find(List l,Position p);
int main()
{
List l;
int n,t;
Position k,p;
p=0;
l=MakeEmpty();
scanf("%d",&k);
while(1)
{
scanf("%d",&n);
if(n<0)
break;
Insert(l,n,p++);
}
t=Find(l,k);
if(t==-1)
printf("NULL");
else
{ printf("%d",t);
printf("\n");
}
return 0;
}
List MakeEmpty()
{
List l;
l=(List)malloc(sizeof(struct LNode));
l->last=-1;
return l;
}
void Insert(List l,Element x,Position p)
{
int j;
/*if(p<0||p>l->last+1)
return -1;*/
l->data[p]=x;
l->last++;
}
int Find(List l,Position p)
{
if(p<0||p>l->last+1)
return -1;
else
return l->data[l->last+1-p];
}
在pta上运行后如下