List.h头文件源代码:
#ifndef _LIST_H_
#define _LIST_H_
//迭代器的前置声明
template
class ListInterator;
//链表类的前置声明
template
class List;
template
class ListNode //节点类
{
friend class List;
friend class ListInterator;
private:
Type data; //节点存储数据
ListNode* link; //指向下一个节点的指针
ListNode(Type); //节点的构造函数
ListNode(){};
};
template
class List //链表类
{
friend class ListInterator;
public:
List() //链表的构造函数
{
first=new ListNode;
first->link=first;
}
void Insert(Type); //插入节点
void Delete(Type); //删除节点
private:
ListNode* first;
};
template
class ListInterator //链表迭代器类
{
public:
ListInterator(const List& l):list(l),current(l.first->link){};
bool NotNull(); //判断当前节点是否为空
bool NextNotNull(); //当前节点的下一个节点是否为空
Type* First();
Type* Next();
private:
const List& list;
ListNode* current;
};
//节点构造函数的实现
template
ListNode::ListNode(Type elemnt)
{
data=elemnt;
link=0;
}
//链表类插入函数的实现
template
void List::Insert(Type k)
{
ListNode* newnode=new ListNode(k);
newnode->link=first->link; //原来的头指针后移
first->link=newnode; //插入的新的节点指针成为头指针
}
template
void List::Delete(Type k)
{
ListNode* previous=first; //保存前一个节点
ListNode* current; //循环指针
for(current=first->link;(current!=first)&¤t->data!=k;previous=current,current=current->link)
{
//空循环
}
if(current!=first)
{
previous->link=current;
delete current;
}
}
template
bool ListInterator::NotNull()
{
if(current!=list.first)
return true;
else
return false;
}
template
bool ListInterator::NextNotNull()
{
if(current->link!=list.first)
return true;
else
return false;
}
template
Type* ListInterator::First()
{
if(current!=list.first)
return ¤t->data;
else
return 0;
}
template
Type* ListInterator::Next()
{
current=current->link;
if(current==list.first)
current=current->link;
return ¤t->data;
}
#endif
主程序源代码:
#include
#include"List.h"
using namespace std;
int main()
{
List intList;
intList.Insert(5);
intList.Insert(15);
intList.Insert(25);
intList.Insert(35);
ListInterator iter(intList);
cout<<*iter.First()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
cout<<*iter.Next()<<endl;
return 0;
}
运行结果: