異質鏈表的Java實現
所謂異質鏈表即鏈表的節點類型可以不同。我實現的是四個公司,其中一個定義為基類公司BaseCompany,另外三個繼承這個基類。另外建立了一個List類表示節點類,其中包含了一個head頭結點。編號為0。從而可以任意順序把這個四個類組成鏈表,並實現插入,刪除,修改等方法。
公司類包含:
name:公司名稱
boss:公司老闆
next:指向公司的對象
id:公司編號
列印結果具體如下:
*****************************
建立鏈表的內容如下
*****************************
編號0 公司名稱:null 老闆:null
編號1 公司名稱:Innovation Works 老闆:Kai-Fu Lee
編號2 公司名稱:Tecent 老闆:Pony
編號3 公司名稱:Baidu 老闆:Robbin
編號4 公司名稱:Google 老闆:Larry Page
*****************************
刪除其中的節點如下
*****************************
刪除的是1號節點
刪除的是4號節點
*****************************
修改2號公司的內容資訊
*****************************
更新的是2公司名稱和老闆
*****************************
剩餘節點如下
*****************************
編號0 公司名稱:null 老闆:null
編號2 公司名稱:Apple 老闆:Jobs
編號3 公司名稱:Baidu 老闆:Robbin
具體實現如下,程式有詳細注釋。
package com.zjw;
//公司基類
class BaseCompany {
String name; //公司名字
String boss; //公司老闆
int id ; //公司編號
BaseCompany next; //指向後繼節點的對象
//構造方法
BaseCompany(String name,String boss,int id){
this.name=name;
this.boss=boss;
this.id = id;
}
//指向後繼節點的方法
void next(BaseCompany next){
this.next = next;
}
//顯示自己資訊的方法
void print(){
System.out.println("編號" + id + " 公司名稱:" + name + " 老闆:" + boss);
}
}
package com.zjw;
//子公司類1
class CompanyOne extends BaseCompany {
CompanyOne(String name, String boss,int id) {
super(name, boss,id);
}
}
package com.zjw;
//子公司類2
class CompanyTwo extends BaseCompany {
CompanyTwo(String name, String boss,int id) {
super(name, boss, id);
}
}
package com.zjw;
//子公司類3
class CompanyThree extends BaseCompany {
CompanyThree(String name, String boss,int id) {
super(name, boss, id);
}
}
package com.zjw;
//鏈表類
class List {
BaseCompany head = new BaseCompany("null", "null", 0);//頭結點
BaseCompany p1 = head; //用來遍曆的節點
BaseCompany p2 = head; //用來遍曆的節點
int size = 0; //鏈表的真實大小
//節點的插入方法
void insert(BaseCompany baseCompany){
p1.next(baseCompany);
p1 = p1.next;
size++;
}
//節點的修改方法
void update(BaseCompany baseCompany,String name,String boss){
baseCompany.name = name;
baseCompany.boss = boss;
System.out.println("更新的是" +baseCompany.id + "公司名稱和老闆");
}
//節點的刪除方法
void delete(BaseCompany baseCompany){
for(int i=0;i<size;i++){
if(p2.next == baseCompany){
p2.next = baseCompany.next;
baseCompany.next = null;
p2 = head;
size--;
System.out.println("刪除的是" + baseCompany.id + "號節點");
break;
}
p2 = p2.next;
}
}
}
package com.zjw;
//測試類別
public class Test {
public static void main(String[] args){
//產生四個公司的對象,生存鏈表的頭結點
BaseCompany one = new BaseCompany("Innovation Works", "Kai-Fu Lee",1);
CompanyOne two = new CompanyOne("Tecent","Pony",2);
CompanyTwo three = new CompanyTwo("Baidu","Robbin",3);
CompanyThree four = new CompanyThree("Google","Larry Page",4);
List list = new List();
//任意的把四個對象組成一個鏈表,順序自定
list.insert(one);
list.insert(two);
list.insert(three);
list.insert(four);
//迴圈的列印出來鏈表的內容
System.out.println("*****************************");
System.out.println(" 建立鏈表的內容如下");
System.out.println("*****************************");
BaseCompany pp = list.head;
for(int i=0;i<=list.size;i++){
pp.print();
pp = pp.next;
}
//任意刪除其中的節點
System.out.println("*****************************");
System.out.println(" 刪除其中的節點如下");
System.out.println("*****************************");
list.delete(one);
//list.delete(two);
//list.delete(three);
list.delete(four);
//修改2號公司的內容資訊
System.out.println("*****************************");
System.out.println(" 修改2號公司的內容資訊");
System.out.println("*****************************");
list.update(two,"Apple","Jobs");
//迴圈的列印出剩餘鏈表的內容
System.out.println("*****************************");
System.out.println(" 剩餘節點如下");
System.out.println("*****************************");
BaseCompany pp1 = list.head;
for(int i=0;i<=list.size;i++){
pp1.print();
pp1 = pp1.next;
}
}
}