链表及应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十九链表及应用
一、实验目的
1.理解线性表的第二类形式——链表的构成。
2.掌握链表的算法编程与应用,包括构造链表、查找结点、插入结点、删除结点和对链表排序等基本操作。
二、实验内容
1.编程:修改主教材例7.6,数据由文本文件导入。
2. 范例:修改单链表模板类,使结点类的数据域改为数据类对象的指针。要求为该单链表模板类建立深复制函数,这需要结点类和学生类的复制构造函数均为深复制。其中学生类的深复制是调用string类的复制构造函数完成的,直接用默认的,同样析构函数也不要重编。
并据此建立一个学生链表,原始数据放在文本文件EXP19_2.txt中。
新的单链表模板类如下:
//文件Exp19_2.h
#include
using namespace std;
//链表结点采用结点类,凡与结点数据和指针操作有关函数作为成员函数
template
template
T* info; //数据域
Node
public:
Node(){info=NULL;link=NULL;} //生成头结点的构造函数
Node(const T & data){ //生成一般结点的构造函数
info=new T(data);
link=NULL;
}
Node(Node
~Node(){delete info;}
void InsertAfter(Node
Node
//以List为友元类,List可直接访问Node的私有函数,与结构一样方便,但更安全
};
template
info=new T(*);
link=NULL;
}
template
p->link=link;
link=p;
}
template
Node
if(link==NULL) tempP=NULL; //已在链尾,后面无结点
else link=tempP->link;
return tempP;
}
//再定义链表类,选择常用操作:包括建立有序链表、搜索、插入、删除、取数据等template
Node
public:
List(){head=tail=new Node
List(List
~List(); //析构函数
void MakeEmpty(); //清空一个链表,只余表头结点
Node
void PrintList(); //打印链表的数据域
void InsertFront(Node
Node
Node
};
template
Node
head=tail=new Node
while(TempP!=NULL){
P1=new Node
P1->link=tail->link; //向后生成list1
tail->link=P1;
tail=P1;
TempP=TempP->link;
}
}
template
MakeEmpty();
delete head;
}
template
Node
while(head->link!=NULL){
tempP=head->link;