分享
 
 
 

【头文件】c++实现链表

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

#ifndef LIST_H

#define LIST_H

template<typename elemtype>class list_item

{

public:

list_item( elemtype, list_item<elemtype>* );

list_item( const list_item<elemtype>& );

const elemtype date () const;

const list_item<elemtype>* next() const;

void get_date ( const elemtype );

void get_next ( const list_item<elemtype>* );

void operator =( const list_item<elemtype>& );

private:

elemtype _date;

list_item<elemtype> *_next;

};//单链表数据项类

//数据项类代码实现

template<typename elemtype>

list_item<elemtype>::list_item( elemtype ia = 0,

list_item<elemtype> *p = 0 )

{

get_date( ia );

if( p == NULL )

get_next( NULL );

else

{

get_next( p->next() );

p->get_next( this );

}

}

template<typename elemtype>

const elemtype

list_item<elemtype>::date() const

{

return _date;

}

template<typename elemtype> const

list_item<elemtype>* list_item<elemtype>::

next() const

{

return _next;

}

template<typename elemtype>

void list_item<elemtype>::get_date( const elemtype de )

{

_date = de;

}

template<typename elemtype>

void list_item<elemtype>::

get_next( const list_item<elemtype> *pev )

{

_next = ( list_item<elemtype>* )pev;

}

template<typename elemtype> class list

{

public:

list();

list( const list<elemtype>& );

~list();

const int size() const;

const bool empty() const;

void insert( const elemtype, const elemtype );

void insert_front( const elemtype );

void insert_end( const elemtype );

void remove( const elemtype );

void remove_all();

void remove_front();

void print() const;

const list_item<elemtype>* find( const elemtype );

void operator =( const list<elemtype>& );

private:

//

void down_size();

void add_size();

//

list_item<elemtype> *at_front;

list_item<elemtype> *at_end;

list_item<elemtype> *at_move;

int _size;

};//链表类定义

//函数实现代码

//私有函数集合

template<typename elemtype>

void list<elemtype>::add_size()

{

++_size;

}

template<typename elemtype>

void list<elemtype>::down_size()

{

--_size;

}

//公有函数集合

template<typename elemtype>

list<elemtype>::list() {

at_front = NULL;

at_end = NULL;

_size = 0;

}

template<typename elemtype>

list<elemtype>::~list()

{

remove_all();

}

template<typename elemtype>

const bool list<elemtype>::empty() const

{

return size() == 0 ? false : true;

}

template<typename elemtype>

const int list<elemtype>::size() const

{

return _size;

}

template<typename elemtype>

void list<elemtype>::insert_front( const elemtype iva )

{

list_item<elemtype> *pv =

new list_item<elemtype>( iva, 0 );

if( !at_front )

{

at_front = at_end = pv;

}

else

{

pv->get_next( at_front );

at_front = pv;

}

add_size();

}

template<typename elemtype>

void list<elemtype>::insert_end( const elemtype iva )

{

if( at_end == NULL)

{

at_end = at_front =

new list_item<elemtype>( iva, 0 );

}

else

at_end = new list_item<elemtype>( iva, at_end );

add_size();

}

template<typename elemtype> void list<elemtype>::

insert( const elemtype ixa, const elemtype iva )

{

list_item<elemtype> *pev =

( list_item<elemtype>* )find( iva );

if( pev == NULL )

{

cerr << "err!" <<endl;

return;

}

if( pev == at_front )

insert_front( ixa );

else {

new list_item<elemtype>( ixa, pev );

add_size();

}

}

template<typename elemtype> const

list_item<elemtype>* list<elemtype>::

find( const elemtype iva )

{

list_item<elemtype> *at_move = at_front;

while( at_move != NULL )

{

if( at_move->date() == iva )

return at_move;

at_move = ( list_item<elemtype>* )at_move->next();

}

return NULL;

}

template<typename elemtype>

void list<elemtype>::remove_front()

{

if( at_front )

{

list_item<elemtype> *pev = at_front;

at_front = ( list_item<elemtype>* )at_front->next();

delete pev;

down_size();

}

}

template<typename elemtype>

void list<elemtype>::remove( elemtype iva )

{

list_item<elemtype> *pev = at_front;

while( pev && pev->date() == iva )

{

pev = ( list_item<elemtype>* )pev->next();

remove_front();

}

if( !pev )

return ;

list_item<elemtype> *prv = pev;

pev = ( list_item<elemtype>* )pev->next();

while( pev )

{

if( pev->date() == iva )

{

prv->get_next( pev->next() );

down_size();

delete pev;

pev = ( list_item<elemtype>* )prv->next();

if( pev != NULL )

{

at_end = prv;

return;

}

}

else

{

prv = pev;

pev = ( list_item<elemtype>* )pev->next();

}

}

}

template<typename elemtype>

void list<elemtype>::remove_all()

{

while( at_front )

remove_front();

_size = 0;

at_front = at_end = NULL;

}

template<typename elemtype>

void list<elemtype>::print() const

{

list_item<elemtype> *pev = at_front;

cout << '[' << size() << ']';

cout << '{';

for( int ix = 0; pev && ix < size(); ++ix )

{

cout << pev->date() << ' ';

pev = ( list_item<elemtype>* )pev->next();

}

cout << '}' << endl;

}

#endif

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有