#include<stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
void InitList(SqList &L)
{
L.length=0;
}
int GetElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length)
return 0;
else
{
e=L.data[i-1];
return 1;
}
}
int InsElem(SqList&L,ElemType x,int i)
{
int j;
if(i<1||i>L.length+1)
return 0;
for (j=L.length;j>i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=x;
L.length++;
return 1;
}
void DispList(SqList L)
{
int i;
for (i=0;i<L.length;i++)
printf("%d ",L.data[i]);
printf("\n");
}
#define INF 32767
int Topk2(SqList A,SqList B,int k,ElemType&e)
{
int i=0,j=0;
if(k<1||k>A.length+B.length)
return 0;
while(true)
{
k--;
int x=(i<A.length?A.data[i]:INF);
int y=(j<B.length?B.data[j]:INF);
if(x<y)
{
if(k==0)
{
e=x;
return 1;
}
i++;
}
else
{
if(k==0)
{
e=y;
return 1;
}
j++;
}
}
}
int main()
{
int k=2,flag;
ElemType e;
SqList A;
SqList B;
InitList(A);
InitList(B);
InsElem(A,1,1);
InsElem(A,2,2);
InsElem(A,3,3);
InsElem(A,4,4);
InsElem(A,5,5);
InsElem(A,6,6);
InsElem(B,7,1);
InsElem(B,8,2);
InsElem(B,9,3);
InsElem(B,10,4);
InsElem(B,11,5);
InsElem(B,12,6);
printf("线性表A:");
DispList(A);
printf("线性表B:");
DispList(B);
flag=Topk2(A,B,k,e);//调用函数Topk2,得到元素e,若flag为0,说明k参数不对,没找到。
if (flag)
printf("第%d小元素为:%d\n",k,e);
else
printf("参数k设置错误,k小于1或者超出两个列表的长度总和!");
}