线性表链式存储C++实现
#include"LsList.h"
#include<ITERATOR>
#include<LIST>
#include<VECTOR>
using namespace std;
#pragma once
template<CLASS T>
class LsList
{
public:
class LNode{
public:
T data;//数据域
LNode * next;//指针域
~LNode()
{
}
};
public://定义迭代器类型,用于高效遍历
//由于是单向链表所以该迭代器类型只能是"前向迭代器"
class Iter{//迭代器类型
public :
Iter(LNode * t)
{
mp = t;
}
//重载迭代器++操作符
Iter & operator++( )//前缀自增操作符重载
{
LNode * p = mp;
mp = mp->next;
return *this;
}
Iter & operator++(int)//后缀自增操作符重载
{
LNode * p = mp;
mp = mp->next;
return *this;
}
//重载迭代器*操作符
T & operator*()
{
return (*mp)。data;
}
//重载迭代器==操作符
bool operator==(Iter & iter)
{
return mp==iter.mp;
}
//重载迭代器!=操作符
bool operator!=(Iter & iter)
{
return mp!=iter.mp;
}
private :
LNode * mp;
};
public:
typedef T ElemType;//定义元素类型
LsList(void)//建立一个空的链式线性表
{
size = 0;
head.next = 0;
pr = & head;
}
LsList(LsList<T> & ls)//赋值构造函数
{
size = 0;
head.next = 0;
pr = & head;
for(LsList<T>::Iter iter = ls.begin();iter != ls.end();iter++)
{
push_back( *iter);
}
}
//赋值操作符重载
LsList & operator = ( LsList<T> & tl)
{
clear();
size = 0;
head.next = 0;
pr = & head;
for(LsList<T>::Iter iter = tl.begin();iter != tl.end();iter++)
{
push_back( *iter);
}
return *this;
}
//数组初始化方式
LsList(T t[],int n)
{ if(n<=0)
{
throw underflow_error("underflow_error");
}
size = 0;
LNode * pl = new LNode();
head.next = pl;
pr = pl;
for(int i=0;i<N-1;I++) pl- {>data = t[i];
LNode *p = new LNode();
pl->next = p;
pl = p;
size++;
}
pl->data = t[n-1];
pr = pl;
size++;
pl->next = 0;
}