複習鍊錶基本資料結構, 新增注釋
參考**為 <
鍊錶節點模板
#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...