定义一个顺序表
typedef struct
{
int *p;
int length;
} list;
初始化顺序表
status csh(list &L)
{
L.p=new status(MAXSIZE);
if(!L.p)
exit(OVERFLOW);
L.length=0;
return ok;
}
两有序顺序表合并后的中位数函数,此为两表长相同均为n的顺序表,表长若不同,类推即可。
status zws(list &a,list &b,status n)
{
int i=0,c,q=0;
while(i+q<n)
{
if(*a.p>*b.p)
{
c=*b.p;
q++;
if(q<n)
b.p++;
}
else
{
c=*a.p;
i++;
if(i<n)
a.p++;
}
}
printf("两有序顺序表合并后的中位数是:%d",c);
return ok;
}
分析
表A 1 2 3 4 5 6
表B 2 4 5 6 8 9
A1 B1 比较将小值赋给一个参量(作为可能中位数),同时用一个变量来记录此值在哪个位置,指向小值的指针指向相同顺序表中的下一个元素, 然后A2 B1比较以此类推 直到到中间位置。
注意点
1.当记录到中间位置时要跳出,所以i+q要为中间值时跳出,所以while 条件为 i+q<n。
2.指针若已指向最后一位 则不应再指向下一位 设一个条件语句来限制,从而达到目标。
3.一定要为有序顺序表。
总结
两顺序表一对一从前往后进行比较小值赋给一变量(记录为可能中间值)相当于丢出去,此表中后面的值再往前推填补这个值再与另一表中的值进行比较。取一变量记录可能中间值的位置,到达中间位置结束,变量记录值即为中间值。