C 雙向鍊錶實現

2021-09-26 20:03:58 字數 4461 閱讀 6419

複習鍊錶基本資料結構, 新增注釋

參考**為 <

鍊錶節點模板

#include

template

<

typename t>

struct listnode

listnode

(t e, listnode

* p =

null

, listnode

* s =

null):

data

(e),

pred

(p),

succ

(s)

listnode

*insertaspred

(t const

& e)

listnod

*insertassucc

(t const

& e)

};

雙向鍊錶實現

#include

#inlcude "listnode.h"

typedef

int rank;

template

<

typename t>

class

list

list

(list

const

& l)

//複製建構函式

list

(listnode

* p,

int n)

//建構函式

~list()

//析構函式

rank size()

const

bool

empty()

const

t&operator

(rank r)

const

; listnode

*first()

const

listnode

*last()

const

bool

vaild

(listnode

* p)

intdisordered()

const

;//查詢元素e所在的節點, 有返回節點位置, 無返回空

listnode

*find

(t const

& e)

const

;//在節點p的前n個節點查詢元素e所在的節點, 有返回節點位置, 無返回空

listnode

*find

(t const

& e,

int n, listnode

* p)

const

; listnode

*search

(t const

& e)

const

//在節點p的前n個節點查詢第乙個不大於元素e所在的節點, 有返回節點位置, 失敗時, 返回p節點前的第n+1個節點位置

listnode

*search

(t const

&e,int n, listnode

* p)

const

; listnode

*selectmax()

//自p節點起的n個幾點,選擇最大的元素

listnode

*selectmax

(listnode

* p,

int n)

; listnode

*insertasfirst

(t const

& e)

listnode

*insertaslast

(t const

& e)

listnode

*insertasbefore

(t const

& e, listnode

* p)

listnode

*insertasafter

(t const

& e)

t remove

(listnode

* p)

;void

merge

(list

& l)

void

sort

(listnode

* p,

int n)

//排序自節點p起的n個節點

void

sort()

intdeduplicate()

;//無序去重

intuniquify()

;//有序去重

void

reverse()

;};template

<

typename t>

void list

::init()

template

<

typename t>

int list

::clear()

template

<

typename t>

void list

::copynodes

(listnode

(t>

* p,

int n)

//複製從p起的n個節點

}template

<

typename t>

void list

::merge

(listnode

*&p,

int n, list

& l, listnode

* q,

int m)

else

p = pp -

> succ;

}template

<

typename t>

void list

::mergesort

(listnode

* p,

int n)

template

<

typename t>

void list

::selectionsort

(listnode

* p,

int n)

}template

<

typename t>

void list

::insertionsort

(listnode

* p,

int n)

}template

<

typename t>

t& list

::operator

(rank r)

const

template

<

typename t>

int list

::disordered()

const

template

<

typename t>

listnode

* list

::find

(t const

& e,

int n, listnode

* p)

const

template

<

typename t>

listnode

* list

::search

(t const

&e.int n, listnode

* p)

const

template

<

typename t>

listnode

* list

::selectmax

(listnode

* p,

int n)

;template

<

typename t>

t list

::remove

(listnode

* p)

template

<

typename t>

void list

::sort

(listnode

* p,

int n)

}template

<

typename t>

int list

::deduplicate()

return old - _size;

}template

<

typename t>

int list

::uniquify()

return oldsize - _size;

template

<

typename t>

void list

::reverse()

雙向鍊錶(C實現)

list.h ifndef list h define list h typedef struct node node typedef struct list list initlist int insertnode list l,void data,int size int deletenode ...

雙向鍊錶(c 實現)

雙向鍊錶與單鏈表有許多的相似之處,但是也有不同之處。雙向鍊錶與單鏈表主要的不同在於 雙向鍊錶可以從兩個方向進行遍歷,但是單鏈表只能從頭節點遍歷到尾節點,不能從尾節點遍歷到頭節點,對於鍊錶中一些插入和刪除等操作,雙向鍊錶較單鏈表更為簡單些。所以,雙向鍊錶有其存在的特殊意義。下面是通過c 來實現雙向鍊錶...

雙向鍊錶 C 實現

雙向鍊錶在類中的實現 include include includeusing namespace std typedef int datatype struct node node pnext node ppre int data class list list const list l else...