資料結構 單鏈表

2021-09-27 01:31:02 字數 4039 閱讀 6712

單鏈表:

優點:能夠在插入以及刪除的時候有較低的時間複雜度,且不需要進行預先的空間分配,不會造成溢位

缺點:不能方便訪問資料,訪問速度慢,且為了兩節點之間的邏輯關係付出了額外的空間代價

(不僅要存資料,還有link需要儲存)

單鏈表的類定義:

注意:在一開始需要先定義乙個節點類方便操作

template

struct linknode

linknode

( t item, linknode

* ptr=

null)}

;template

class list

list

(const t& x)

list

(list

& l);~

list()

void

makeempty()

;int

length()

const

; linknode

*gethead()

const

linknode

*search

(t& x)

const

; linknode

*locate

(int i)

; bool getdata

(int i, t& x)

const

;void

setdata

(int i, t& x)

; bool insert

(int i, t& x)

; bool remove

(int i, t& x)

; bool isempty()

void

input()

;void

output()

;};

在宣告函式

linknode

( t item, linknode

* ptr=

null

)

後,要宣告乙個帶有初始值的節點為以下**

linknode

* q=new linknode

(x);

//必須使用new函式

不要和拷貝建構函式(如下錯誤)弄混了

linknode* q(x);
一般單鏈表使用帶有附加頭節點的形式,保證在空表的情況下易於對資料進行處理,不用擔心把首節點去掉後整個鍊錶被刪了

template

void list::

makeempty()

delete first;

}

在進行析構時,注意不要直接刪除first節點,這樣無法獲得後面的節點進而無法刪除,會一直占用記憶體,不利於計算機健康故應採用以上方法逐個刪除

在進行刪除操作時注意要到要刪除的節點的前乙個,然後進行刪除

p->link=p->link->link;

但是注意原本的p->link還要進行刪除

**如下

template

bool list::

remove

(int i,t&x)

if(p ==

null

)return false;

linknode

* q = p->link;

x = q->data;

p->link = q->link;

delete q;

return true;

}

總的**如下:

#include

using namespace std;

template

struct linknode

linknode

( t item, linknode

* ptr=

null)}

;template

class list

list

(const t& x)

list

(list

& l);~

list()

void

makeempty()

;int

length()

const

; linknode

*gethead()

const

linknode

*search

(t& x)

const

; linknode

*locate

(int i)

; bool getdata

(int i, t& x)

const

;void

setdata

(int i, t& x)

; bool insert

(int i, t& x)

; bool remove

(int i, t& x)

; bool isempty()

void

input()

;void

output()

;};template

list::

list

(list

& l)

}template

void list::

makeempty()

delete first;

}template

int list::

length()

const

return i;

}template

linknode

* list::

search

(t& x)

const

return p;

}template

linknode

* list::

locate

(int i)

return p;

}template

bool list::

getdata

(int i ,t&x)

const

if(p ==

null

)return false;

x = p->data;

return true;

}template

void list::

setdata

(int i,t&x)

p->data = x;

}template

bool list::

insert

(int i, t& x)

if(p ==

null

)return false;

linknode

* q=new linknode

(x);

linknode

* r=p->link;

q->link = r;

p->link = q;

return true;

}template

bool list::

remove

(int i,t&x)

if(p ==

null

)return false;

linknode

* q = p->link;

x = q->data;

p->link = q->link;

delete q;

return true;

}template

void list::

input()

}template

void list::

output()

}

資料結構單鏈表

初學資料結構,貼段自己編寫的單鏈表程式,希望自己能夠一直以強大的學習熱情持續下去!自勉!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...