資料結構 第4講 單鏈表
結點結構體的定義:
定義了結點之後,我們就可以把若干個結點連線在一起,形成乙個鍊錶:
是不是像乙個鐵鍊子,一環扣一環的連在一起?
不管這個鐵鍊子有多長,只要我們找到它的頭,就可以拉起整個鐵鍊子,因此我們給這個鍊錶設定乙個頭指標,這個鍊錶中的每個結點都可以找到了。
有時候為了操作方便,我們還會給鍊錶增加乙個不存放資料的頭結點:
就像是給鐵鍊子加個鑰匙扣:
我們可以看到剛才的鍊錶每個指標都是指向下乙個結點,都是朝向乙個方向的,這樣的鍊錶稱為單向鍊錶,或單鏈表。
在順序表中,想找第i個元素,就可以立即通過l.elem[i-1]找到,稱為隨機訪問方式,而在單鏈表中,想找第i個元素?沒那麼容易,必須從頭開始,按順序乙個乙個來,一直數到第i個元素,稱為順序訪問方式。
下面以帶頭結點的單鏈表為例,講解單鏈表的初始化、建立、取值、查詢、插入、刪除操作。
單鏈表初始化
單鏈表初始化是指構建乙個空表:
bool initlist_l(linklist &l)//構造乙個空的單鏈表l
l=new lnode; //生成新結點作為頭結點,用頭指標l指向頭結點
if(!l)
return false; //生成結點失敗
l->next=null; //頭結點的指標域置空
return true;
單鏈表的建立
建立單鏈表分為前插法和尾插法兩種,前插法建立的單鏈表和輸入順序正好相反,因此稱為逆序建表,尾插法建立的單鏈表和輸入順序一致,因此稱為正序建表。
前插法建表如圖:
初始狀態
輸入資料元素1,建立新結點,把元素1放入新結點資料域:
s=new lnode; //生成新結點s
cin>>s->data; //輸入元素值賦給新結點的資料域
前插操作,插入到頭結點的後面:
輸入資料元素2,建立新結點,把元素2放入新結點資料域:
前插操作,插入到頭結點的後面:
![這裡寫**片](
解釋:為什麼要先修改後面那個指標呢?
因為一旦修改了l結點的指標域指向s,那麼原來l結點後面的結點就找不到了,
注意:修改指標順序的原則:先修改沒有指標標記的那一端。
如果要插入結點的兩端都有標記,例如再定義乙個指標q指向第1個結點,那麼先修改哪個指標都無所謂了。
拉直鍊錶之後:
繼續依次輸入資料元素3,4,5,6,7,8,9,10,前插法建立鍊錶的結果:
void createlist_h(linklist &l)//前插法建立單鏈表
int n; //輸入n個元素的值,建立到頭結點的單鏈表l
linklist s; //定義乙個指標變數
l=new lnode;
l->next=null; //先建立乙個帶頭結點的空鍊錶
cout
cout data; //輸入元素值賦給新結點的資料域
s->next=l->next;
l->next=s; //將新結點s插入到頭結點之後
}
尾插法建表如圖:
初始狀態(尾插法需要乙個尾指標永遠指向鍊錶的尾結點)
輸入資料元素1,建立新結點,把元素1放入新結點資料域:
s=new lnode; //生成新結點s
cin>>s->data; //輸入元素值賦給新結點的資料域
尾插操作,插入到尾結點的後面:
解釋:輸入資料元素2,建立新結點,把元素2放入新結點資料域:
尾插操作,插入到尾結點的後面:
繼續依次輸入資料元素3,4,5,6,7,8,9,10,前插法建立鍊錶的結果:
void createlist_r(linklist &l)//尾插法建立單鏈表
//輸入n個元素的值,建立帶表頭結點的單鏈表l
int n;
linklist s, r;
l=new lnode;
l->next=null; //先建立乙個帶頭結點的空鍊錶
r=l; //尾指標r指向頭結點
cout
cout data; //輸入元素值賦給新結點的資料域
s->next=null;
r->next=s;//將新結點s插入尾結點r之後
r=s;//r指向新的尾結點s
}
資料結構單鏈表
初學資料結構,貼段自己編寫的單鏈表程式,希望自己能夠一直以強大的學習熱情持續下去!自勉!2012年3月30日 於大連 include using namespace std typedef struct node linklist,node linklist makelist int n void ...
資料結構 單鏈表
今天浪費了好多時間,也許是心裡想著明天的考試吧 可自己也知道這次的考試,自己畢竟過不了了,只好等到今年11月份,想想那時自己已經大三了 還有那麼多時間嗎!很懊惱今天不知怎麼回事,感嘆環境真的可以影響乙個人,真的可以 把今天的學習筆記寫下來,沒有進行好好的整理,這回單鏈表的功能較多,操作比較散,最後乙...
資料結構 單鏈表
實現乙個單鏈表 1 查詢 查詢第index個節點 查詢指定的元素 2 插入 將指定的元素插入到第index個節點上 3 刪除 將第index個節點刪除 規律 刪除和新增元素前務必儲存兩個元素的位址引用資訊 public class mylinkedlist 記錄鍊錶結構的頭結點位址引用 privat...