Java 顺序表-两个有序表的合并
程序员文章站
2024-03-08 23:06:28
...
两个升序顺序表合并成升序表,主要涉及两个对象的互操作
(1)SeqList merge1(SeqList L1,SeqList L2); —此种方式最简单
(2)SeqList merge2(SeqList L); —此种方式较常用
(3)void merge3(SeqList L); —此种方式最常用
import java.util.Scanner;
class SeqList{ //顺序表=数组+表长
int [] a;
int size;
int len;
SeqList(int x){
size = x;
a=new int [x];
}
void create(){
int x,i=0;
Scanner sc = new Scanner(System.in);
x = sc.nextInt();
while(x!=-1) {
a[i] = x;
i++;
x = sc.nextInt();
}
len = i;
}
void print() {
for(int i=0;i<len;i++)
System.out.print(a[i]+" ");
System.out.print("\n");
}
SeqList merge1(SeqList L1,SeqList L2) {
SeqList newL = new SeqList(50);
int i,j,k; i=0; j=0; k=0;
while(i<L1.len && j<L2.len) {
if(L1.a[i] < L2.a[j]) {
newL.a[k] = L1.a[i];
k++; i++;
}
else{
newL.a[k] = L2.a[j];
k++; j++;
}
}
while(i<L1.len) {
newL.a[k] = L1.a[i];
k++; i++;
}
while(j<L2.len) {
newL.a[k] = L2.a[j];
k++; j++;
}
newL.len = k;
return newL;
}
SeqList merge2(SeqList L1) {
//考虑调用情形:a.merge(b),即a与b合并,即a实际上就是this
//与merge1(L1,L2)相比,把所有的L2改成this
SeqList newL = new SeqList(50);
int i,j,k; i=0; j=0; k=0;
while(i<L1.len && j<this.len) {
if(L1.a[i] < this.a[j]) {
newL.a[k] = L1.a[i];
k++; i++;
}
else{
newL.a[k] = this.a[j];
k++; j++;
}
}
while(i<L1.len) {
newL.a[k] = L1.a[i];
k++; i++;
}
while(j<this.len) {
newL.a[k] = this.a[j];
k++; j++;
}
newL.len = k;
return newL;
}
void merge3(SeqList L1) {
//考虑调用情形:a.merge(b),即a与b合并,即a实际上就是this
//与merge1(L1,L2)相比,把所有的L2改成this
int [] x = new int [100];
int i,j,k; i=0; j=0; k=0;
while(i<L1.len && j<this.len) {
if(L1.a[i] < this.a[j]) {
x[k] = L1.a[i];
k++; i++;
}
else{
x[k] = this.a[j];
k++; j++;
}
}
while(i<L1.len) {
x[k] = L1.a[i];
k++; i++;
}
while(j<this.len) {
x[k] = this.a[j];
k++; j++;
}
L1.a = x;
L1.len = k;
}
}
class App{
public static void main(String [] args) {
SeqList a = new SeqList(10);
SeqList b = new SeqList(10);
System.out.println("请输入一组数,以-1结束:");
a.create();
a.print();
System.out.println("请输入一组数,以-1结束:");
b.create();
b.print();
// 调用 SeqList merge1(SeqList L1,SeqList L2)
// SeqList c = a.merge1(a,b);
// 调用 SeqList merge2(SeqList L1)
// SeqList c = a.merge2(b);
// c.print();
// 调用 void merge3(SeqList L1)
a.merge3(b);
b.print();
}
}
上一篇: 详解java中动态代理实现机制