總結自己關於鍊錶的一些理解與學習
鍊錶就是鏈結和**的結合,即指標與資料的結合,個人理解就是乙個個首尾相連的方格
如圖所示,就是乙個個小方格,裡面存放著資料與指標,每個小方格由指標相互連線起來,最前面的叫頭指標,最後面的指標為0.
本例使用的是嵌入類來實現鍊錶,當然也有繼承類、復合類、結構體等實現方式。
linklist.h:
#if !defined linklist_h
#define linklist_h
class link
link const
*next()
const
//返回當前物件的指標變數
link *
next()
//多型
void
setnext
(link * next)
//將傳入的指標賦給當前物件的指標變數
intid()
const
//返回當前物件的資料變數
private:
int _id;
//資料域
link * _pnext;
//指標域};
class list
~list()
;void
add(
int id)
;//新增乙個資料
link const
*gethead()
const
//返回當前物件的資料變數
private:
link * _phead;
//link型別的指標};
class listseq
bool atend()
const
void
advance()
intid()
const
private:
link const
* _link;};
class unlinkseq
bool atend()
const
void
advance()
intid()
const
void
unlink()
;private:
list & _list;
link * _cur;
link * _prev;};
#endif
對頭檔案簡單解釋一下,就是分成了四個類:
link:
建立了乙個link物件,它包括指標域與資料域,而且定義的方法能返回自己的指標域與資料域,也能改變自己的指標域。
建立了乙個list物件,它擁有乙個 _phead變數用來指向乙個link物件(相當於指向整個方格),而且定義的方法能返回這個_phead,也能為鍊錶新增新的**。
下圖為鍊錶新增新**(add函式)的過程
重複以上過程就能新增多個方格
listseq:
建立了乙個listseq物件,它的作用是讀取鍊錶中的id,即資料。用for迴圈來使用它的幾個方法,在main函式中有相對應的應用。
unlinkseq
類似listseq,建立了乙個unlinkseq物件,它的作用是歷遍並刪除方格。
linklist.cpp:
#include
"linklist.h"
#include
#include
intmain()
seq.
unlink()
;for
(listseq seq
(list)
;!seq.
atend()
; seq.
advance()
)return0;
}void unlinkseq:
:unlink()
else
delete _cur;
_cur =0;
}void list:
:add
(int id)
list::~
list()
}
1、對於const的理解
指向常量指標不能進行寫操作(int const *p)
常量指標不能移動 (int * p const)
函式後的const表示函式不可以修改class的成員(void function()const )
2、 友元與嵌入
嵌入是物件之間 has a的關係(如list與link的關係)
友元是物件之間has access to的關係(如unlinkseq與list的關係)
3、引用作為引數
引用作為引數會改變引數的實際值,這在一些辨析交換函式swap()能否完成交換經常會提到。
4、構析函式
list::
~list()
}
這個構析函式完全就是建構函式的逆方式,乙個是創造方格,乙個是刪除方格。
void unlinkseq::
unlink()
else
delete _cur;
_cur =0;
}
同理,這個刪除方格的方式也是定位方格的位址,找到就直接delete即 C 學習筆記(六)單鏈表 C風格
鏈式儲存結構 結構 資料域指標域 data next 結點定義 typedef struct lnode lnode,linklist 頭指標 linklist即為頭指標。本身一般不儲存資訊 也可儲存長度等相關資訊 指向第乙個元素結點 頭結點 頭指標 鍊錶必須要頭指標,但是不一定有頭結點 頭結點的好...
(學習筆記 4)單鏈表
鍊錶中第乙個節點的儲存位置,叫做頭指標,最後乙個節點指標為空 null 頭指標與頭結點的異同 頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常以頭指標冠以鍊錶的名字 指標變數的名字 無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。...
單鏈表 學習筆記1
首先我們來看一下整體 include define ok 1 using namespace std class infonode infonode createhead int el,infonode l void addtotail int el infonode l r new infonod...