單鏈表:
優點:能夠在插入以及刪除的時候有較低的時間複雜度,且不需要進行預先的空間分配,不會造成溢位
缺點:不能方便訪問資料,訪問速度慢,且為了兩節點之間的邏輯關係付出了額外的空間代價
(不僅要存資料,還有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...