一个简单的链表类

#ifndef TLINKLIST_H

#define
 
TLINKLIST_H
//#define
 
NULL
 
0
#include
 
<stdlib.h>
template
<
class
 
T>
class
 
TLinkList 
;
template
<
class
 
T>
class
 
TLinkNode{
    
friend
 
class
 
TLinkList<
T>
 
;
public
 
:
    
TLinkNode(
TLinkNode<
T>
 
*
p=
NULL){
 
next=
 
p;}
    
TLinkNode(
const
 
T&
 
dat,
TLinkNode<
T>
 
*
p=
NULL)
 
{
data=
dat;
next=
p 
;}
    
T 
getData()
const
 
{
return
 
data;}
private
 
:
    
T 
data 
;
    
TLinkNode 
*
next 
;
};
template
 
<
class
 
T>
class
 
TLinkList{
private
:
    
TLinkNode<
T>*
 
head 
;
    
TLinkNode<
T>*
 
current 
;
    
int
 
size 
;
public
:
    
TLinkList();
//{length=0
 
;}
    
~
TLinkList()
 
;
    
void
 
ClearAll()
 
;
    
int
 
Size()
 
const
 
{
return
 
size 
;}
    
bool
 
IsEmpty()
 
const
{
return
 
(
size==
0
)?
true
:
false
 
;}
    
TLinkNode<
T>
 
*
GetCurrent()
 
const
 
;
    
TLinkNode<
T>
 
*
GetItem(
int
 
k)
 
const
 
;
    
T 
&
GetData(
int
 
k)
 
const
 
;
    
bool
 
Insert(
int
 
k,
 
const
 
T 
&
data)
 
;
    
bool
 
PushFront(
const
 
T 
&
data)
 
;
    
bool
 
PushBack(
const
 
T 
&
data)
 
;
};
template
<
class
 
T>
TLinkList<
T>::
TLinkList(){
    
size=
0
 
;
    
current=
head=
NULL 
;
}
template
<
class
 
T>
TLinkList<
T>::~
TLinkList(){
    
ClearAll()
 
;
}
template
<
class
 
T>
void
 
TLinkList<
T>::
ClearAll(){
    
while
(
head!=
NULL){
        
current=
head 
;
        
head=
head->
next 
;
        
delete
 
current 
;
    
}
    
size=
0
 
;
    
head=
current=
NULL 
;
}
template
<
class
 
T>
TLinkNode<
T>
 
*
TLinkList<
T>::
GetCurrent()
 
const
{
    
return
 
current 
;
}
template
<
class
 
T>
TLinkNode<
T>
 
*
TLinkList<
T>::
GetItem(
int
 
k)
 
const
{
    
if
(
k>
size)
        
return
 
NULL 
;
    
int
 
i=
0
 
;
    
TLinkNode<
T>
 
*
node=
head 
;
    
if
(
head==
NULL)
        
return
 
NULL 
;
    
while
(
i<
k){
        
node=
node->
next 
;
        
i++
 
;
    
}
    
return
 
node 
;
}
template
<
class
 
T>
T 
&
TLinkList<
T>::
GetData(
int
 
k)
 
const
{
    
TLinkNode<
T>
 
*
 
node=
GetItem(
k)
 
;
    
T 
temp 
;
    
if
(
node!=
NULL){
        
temp=
node->
data 
;
    
}
    
return
 
temp 
;
}
template
<
class
 
T>
bool
 
TLinkList<
T>::
Insert(
int
 
k,
 
const
 
T 
&
data){
    
TLinkNode<
T>
 
*
node 
;
    
TLinkNode<
T>
 
*
temp 
;
    
if
(
head==
NULL||
k>
size)
        
return
 
false
 
;
    
temp=
new
 
TLinkNode<
T>(
data)
 
;
    
if
(
k==
0
){
        
PushFront(
data)
 
;
    
}
else
{
        
node=
GetItem(
k-
1
)
 
;
        
temp->
next=
node->
next 
;
        
node->
next=
temp 
;
        
size++
 
;
    
}
    
return
 
true
 
;
}
template
<
class
 
T>
bool
 
TLinkList<
T>::
PushBack(
const
 
T 
&
data){
    
if
(
head==
NULL){
        
head=
current=
new
 
TLinkNode<
T>(
data)
 
;
        
size++
 
;
    
}
else
{
        
current->
next=
new
 
TLinkNode<
T>(
data)
 
;
        
size++
 
;
        
current=
current->
next 
;
    
}
}
template
<
class
 
T>
bool
 
TLinkList<
T>::
PushFront(
const
 
T 
&
data){
    
TLinkNode<
T>
 
*
temp 
;
    
if
(
head==
NULL){
        
head=
current=
new
 
TLinkNode<
T>(
data)
 
;
        
size++
 
;
    
}
else
{
        
temp=
new
 
TLinkNode<
T>(
data)
 
;
        
temp->
next=
head 
;
        
head=
temp 
;
        
size++
 
;
    
}
}
#endif
 
//
 
TLINKLIST_H

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值