用java编写一个数据结构的题!

有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。
算法思路:依次扫描通过A和B的元素,比较当前的元素的值,将较小值的元素赋给C,如此直到一个线性表扫描完毕,然后将未完的那个顺序表中余下部分赋给C即可。C的容量要能够容纳A、B两个线性表相加的长度。
核心算法描述如下:
void SeqList_Merge(SeqList A, SeqList B, SeqList C)
{
int i, j, k;
i=0; j=0; k=0;
while ( i<=A.last && j<=B.last )
if (A.date[i]<B.date[j])
C.data[k++]=A.data[i++];
else C.data[k++]=B.data[j++];
while (i<=A.last ) C.data[k++]= A.data[i++];
while (j<=B.last )C.data[k++]=B.data[j++];
C.last=k-1;
}
要求如下:
必须在所讲的“SeqList”类中实现(在原有类的基础上,添加其他算法及main方法);
写出每个算法的算法思想;
必须在所讲的“SeqList”类中实现(在原有类的基础上,添加其他算法及main方法);
写出每个算法的算法思想;

不是用数组编写,使用线性表排列。

第1个回答  2010-09-20
线性表跟是不是数组没关系啊。。。栈和队列都是线性表吧。。不太懂你的意思。。
public class SeqList {
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5,6,7};
int[] b = new int[]{3,5,8,9};
int[] c = new int[a.length + b.length];
new SeqList().seqListMerge(a, b, c);
}

public void seqListMerge(int[] a, int[] b, int[] c){
//i为数组a的计数器
int i = 0;
//j为数组b的计数器
int j = 0;
//k为数组c的计数器
int k = 0;
//判断两个数组长度,当一个先用完的时候推出循环
while(i < a.length && j < b.length){
if(a[i] > b[j]){
c[k] = b[j];
k++;
j++;
}else{
c[k] = a[i];
k++;
i++;
}
}
//如果a数组先到结尾,那么把b数组的剩下的值拼到c里
if( i == a.length){
while(j < b.length){
c[k] = b[j];
k++;
j++;
}
}
//如果b数组先到结尾,那么把a数组的剩下的值拼到c里
if(j == b.length){
while(i < a.length){
c[k] = a[i];
k++;
i++;
}
}

for(int p : c){
System.out.println(p);
}
}
}
相似回答