資料結構 第4講 單鏈表

2021-08-22 04:57:00 字數 2583 閱讀 6049

資料結構 第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...