链表C++模板实现

--> #包括
#包括 //节点模板类
模板
类节点{
私人:
t1 数据1; //数据成员data1
t2 数据2; //数据成员data2
节点 *下一个; //后续节点指针
大众:
node(t1 da1, t2 da2):data1(da1),data2(da2),next(NULL){} //构造函数
~node(){} //析构函数
t1 getData1(); //获取成员变量data1
t2 getData2(); //获取成员变量data2
节点 * getNext(); //获取后继节点地址
无效 setData1(t1 da1); //设置成员变量data1
无效 setData2(t2 da2); //设置成员变量data2
void setNext(节点 * x); //接下来设置成员变量 }; //链表模板类
模板
班级名单{
私人:
整数; //链表节点数,不包括头节点
节点 * 头; //链表头结点指针
大众:
列表(); //构造函数
〜列表(); //析构函数
void insertFront(节点 &x); //头插入方法
void insertAfter(节点 &x); //尾部插入方法
void insert(int i ,node &x); //在第i个节点处插入节点
无效deleteNode(int i); //删除第i个节点
void setNode(int i ,t1 da1 ,t2 da2); //设置第i个节点的值
无效打印全部(); //打印整个表格
}; /*
节点
的成员函数 */
template //返回数据字段data1的值
t1 节点::getData1(){
返回数据1;
} template //返回数据字段data2的值
t2 节点::getData2(){
返回数据2;
} template //返回后继节点指针
节点 * 节点::getNext(){
返回下一个;
} template //设置数据字段data1的值
空节点::setData1(t1 da1){
数据1 = da1;
} template //设置数据字段data2的值
无效节点::setData2(t2 da2){
数据2 = da2;
} template //设置后继节点指针
void 节点::setNext(节点 * x){
下一个 = x;
} /*
列表的成员函数
*/
template //链表构造函数,创建头节点(头节点的数值字段无意义,设置为0)
列表::list() {
数=0;
head = 新节点(0,0);
}template //链表析构函数依次释放各个节点,包括头节点
列表::~list(){
节点 *p = 头;
节点 *q = head->getNext();
而(p){
q = p->getNext();
if(p != NULL)
删除p;
p = q;
}
} //头插入
template //从head指向的节点插入节点
无效列表::insertFront(节点 &x){
节点 *p = head->getNext();
head->setNext(&x);
x.setNext(p);
num++;
} //在最后插入
template //从链表尾部插入节点
无效列表::insertAfter(node &x){
节点 *p = 头;
节点 *q = NULL;
而(p){
q=p->getNext();
if(q==NULL)
p->setNext(&x);
p = q;
}
num++;
} template //在第i个节点处插入节点
void list::insert(int i , node &x){
如果(i==1)
insertFront(x);
否则 if(i>1 && i<=num){
num++;
int j = 0;
节点 * p = 头;
节点 * q = NULL;
而(p){
j++;
p=p->getNext();
q=p->getNext();
如果(j==i-1){
p->setNext(&x);
x.setNext(q);
打破;
}
}
}
否则{
cout<<"插入位置错误"< 退出(1);
}
} template //删除第i个节点
无效列表::deleteNode(int i){
if(i>=1 && i<=num){
int j = 0;
节点 * p = 头;
节点 * q = NULL;
而(p){
如果(j==i-1){
q = p->getNext();
p->setNext(q->getNext());
删除q;
数字--;
打破;
}
j++;
p=p->getNext();
}
}
否则{
cout<<"删除位置错误"< 退出(1);
}
} template //设置第i个节点的数值字段data1和data2
void list::setNode(int i ,t1 da1 ,t2 da2){
int j =0;
节点 *p = 头;
而(p){
j++;
p=p->getNext();
if(j==i) {
p->setData1(da1);
p->setData2(da2);
}
}
} template //打印整个列表
无效列表::printAll(){
节点 *p = head->getNext();
if(p == NULL)
cout<<"表为空"< 否则{
int i = 1;
而(p){
cout<<"第"<getData1()<<" "<<"data2="<getData2()< 我++;
p=p->getNext();
}
} } 无效主(){
//创建六个节点
节点 *a = 新节点(1,2);
节点 *b = 新节点(2,3);
节点 *c = 新节点(3,4);
节点 *d = 新节点(4,5);
节点 *e = 新节点(5,6);
节点 *f = 新节点(6,7);
列出 z; //创建链表对象
//在表尾插入6个节点
z.insertAfter(*a);
z.insertAfter(*b);
z.insertAfter(*c);
z.insertAfter(*d);
z.insertAfter(*e);
z.insertAfter(*f);
z.setNode(3,0,0); //设置第三个节点的data1为0,data2为0
z.deleteNode(6); //删除第6个节点
z.printAll(); //打印链表
}

-->

相关文章