可用鍊錶是指可以使用鍊錶實現資料的增加、修改、刪除和查詢操作。
node類負責所有的節點資料的儲存以及節點關係的匹配,所以node類不可能單獨去使用。
範例:鍊錶的開發結構
class link
}//********************=以上為內部類********************===
private node root; //需要根節點
如果要進行新資料的增加,則應該有link類負責節點物件的產生,並且由link類維護根節
點,所有節點的關係匹配交給node類處理。
class link
public void addnode(node newnode)else
} }
//********************=以上為內部類*************************
private node root; //需要根節點
public void add(string data)else
}}public class linkdemo
}既然每個鍊錶都有乙個root根元素,那麼每乙個鍊錶就有自己的長度,可以直接在link類
裡面設定乙個count屬性,隨後每一次資料新增完成之後可以進行資料累加。
範例:修改link類
增加乙個count屬性:
class link
//********************=以上為內部類***************====
private node root; //需要根節點
private int count=0;//儲存元素的個數
public void add(string data)else
this.count ++;//每一次儲存完資料count加1
} public int size()
}空鍊錶判斷實際上可以通過兩種方式完成:
·第乙個:判斷root有物件(是否為null);
·第二個:判斷儲存的資料量(count);
範例:class link
}在鍊錶之中一定會儲存多個資料,那麼基本的判斷某乙個資料是否存在的方式:
以string資料為例,迴圈鍊錶中的內容,並且與要查詢的資料進行匹配(equals()),如
果查詢到返回true,查不到返回false。
範例:修改link 類
class link
return this.root.
containsnode(data);//給node類,從根節點開始查}}
修改node 類
private class node
public void addnode(node newnode)
//第一次呼叫(link):this = link.root
//第二次呼叫(node): this = link.root.next
public boolean
containsnode(string data)elseelse}}
}本次使用的是string 資料型別,所以判斷資料使用的是equals()方法,如果是自定義物件呢
?則需要定義乙個物件比較的方法(compare())。
通過以上的**測試,鍊錶裡面儲存了多個string類的物件,在程式裡面只有陣列可以保
存多個物件,使用的鍊錶與陣列相比較的話,優勢就是沒有長度限制,所以鍊錶嚴格意義上
來講就是乙個動態物件陣列,那麼也應該具備像陣列那樣可以根據索引取得元素的功能。
由於是動態物件陣列,所以陣列中的每乙個元素的索引的內容都一定是動態生成的。
範例:在link類裡面增加乙個foot的屬性表示每乙個node元素的編號
private int foot = 0;
在每一次查詢的時候(乙個鍊錶可能查詢多次),那麼foot應該在每一次查詢時都從
頭開始。但是千萬要記住,如果有內容,或者是要查詢的索引小於個數才可以查。
public string get(int index)
this.foot =0; //表示從前向後查詢
return this.root.
getnode(index);//查詢過程交給node類
}範例:在node類裡面實現getnode()方法,內部類和外部類之間可以方便的互相訪問私有屬性
private class node
public void addnode(node newnode)
//第一次呼叫(link):this = link.root
//第二次呼叫(node): this = link.root.next
public boolean containsnode(string data)
public string
getnode(int index)else
} }
修改資料和查詢的區別不大,查詢的時候當滿足索引值的時候,只是進行了乙個資料的返回,那麼此處只需要將資料返回變為資料的重新賦值即可。
範例:在link 類裡面增加set()方法
public void set(int index, string data)
this.foot = 0; //重新設定foot屬性的內容,作為索引出現
this.root.
setnode(index,data); //交給node類設定資料內容
}範例:在node類增加setnode()方法
public void
setnode(int index, string data)else
}對於刪除資料而言,實際上分為兩種情況:
·情況-:要刪除的節點是根節點,則root應該變為「根節點.next」,在link類裡處理。
範例:在node類裡面增加乙個removenode(),此方法專門處理非根節點的刪除
//要傳遞上乙個節點以及要刪除的資料
public void
removenode(node previous, string data)else
}範例:在link類裡面增加根節點的刪除
public void remove(string data)else
this.count --;//個數要減少
}
雙向鍊錶的實現2
這裡介紹氣泡排序在鍊錶中的實現。bubble sort for bi linked list flag 0,oreder from little to large,0 from large to little if 1 int sort lst list head,const int flag el...
實現2個有序鍊錶的合併
原題 本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。函式介面定義 list merge list l1,list l2 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode l...
實現鍊錶及相關的方法 2
思路 下面提供兩種方法,其實大同小異,但是因為鍊錶的最後乙個元素需要指向空,如果少了這個就會出現問題。所以在方法二中,遍歷的過程就將末尾指向空。方法一 將大的資料放在x的右邊,小的資料放在x的左邊 public listnode parttition int x else else else cur...