现在的位置: 首页 > 综合 > 正文

一个简单的链表类

2018年03月16日 ⁄ 综合 ⁄ 共 2018字 ⁄ 字号 评论关闭

#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

抱歉!评论已关闭.