线性表的链式表示与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浙江大学城市学院实验报告

课程名称数据结构基础

实验项目名称实验五线性表的链式表示和实现

学生姓名吴奇专业班级信管1204 学号31201403

实验成绩指导老师(签名)日期

一.实验目的和要求

1、掌握线性表的链式存储结构;

2、掌握单链表、循环单链表的一些基本操作实现函数。

二.实验内容

1、设线性表采用带表头附加结点的单链表存储结构,请编写线性表各基本操作的实现函数,把它们存放在头文件LinkList.h中,同时建立一个验证操作实现的主函数文件test2_2.cpp。编译并调试程序,直到正确运行。

2、选做:编写一个函数void MergeList(LNode *&La, LNode *&Lb, LNode *&Lc) ,实现将两个带表头附加结点的有序单链表La和Lb合并成一个新的带表头附加结点的有序单链表Lc的功能,要求利用原存储空间。请把该函数添加到头文件LinkList.h中,并在主文件test2_2.cpp中添加相应语句进行测试。

3、填写实验报告,实验报告文件取名为report5.doc。

4、上传实验报告文件report5.doc、源程序文件test2_2.cpp及LinkList.h 到Ftp服务器上自己的文件夹下。

三. 函数的功能说明及算法思路

void initlist(lnode *&hl) 初始化链表

{

hl=new lnode; 新建头节点

if(!hl){

cout<<"储存分配失败,按任意键退出系统!!"<

getchar();

exit(0);

}

hl->next=NULL;

}

bool insertlist(lnode *&hl,elemtype item) 链表中插入元素

{

lnode *n,*ap,*cp;

n=new lnode; ap ,cp为一前一后遍历指针

n->date=item;

cp=hl;

ap=NULL;

while(cp!=NULL) 查找插入位置

{

ap=cp;

cp=cp->next;

}

n->next=cp; 插入元素

ap->next=n;

return true;

}

bool emptylist(lnode *hl) 判断是否为空链表

{

if(hl->next==NULL)

return true;

else

return false;

/*return hl->next==NULL;*/

}

void travellist(lnode *hl) 遍历链表

{ lnode *p; 新建指针P指向第一个节点p=hl->next;

while(p!=NULL){

cout<date<<" ";

p=p->next;

}

cout<

}

void getlist(lnode *hl,int pos) 得到链表中指定位置元素{

int i=0;

lnode *p; 新建指针P指向第一个节点

p=hl->next;

while(p!=NULL){

i++;

if(i==pos) 查找需要得到的元素的位置

break; 找到,跳出

p=p->next; 往下遍历

}

if(p!=NULL)

cout<date<

else{

cout<<"超出线性表的长度,按任意键退出!"<

getchar();

exit(0);

}

}

int lengthlist(lnode *hl) 计算链表长度

{

int i=0;

while(hl->next!=NULL){

i++;

hl=hl->next;

}

return i;

}

void cleanlist(lnode *&hl) 清除链表

{

lnode *ap,*cp;

ap=hl->next; ap指针指向第一个节点

while(ap!=NULL)

{

cp=ap->next; cp指向下一个节点,防止断掉

delete ap; 删除当前节点

ap=cp;

}

hl->next=NULL;

}

bool deletelist(lnode *&hl,elemtype item) 删除链表中的指定元素{ if(hl->next==NULL){

cout<<"线性表为空,按任意键退出!"<

getchar();

exit(0);

}

lnode *ap,*cp; ap,cp为遍历指针

ap=hl->next;

cp=NULL;

while(ap!=NULL){

if(ap->date==item)

break;

else{

cp=ap;

ap=ap->next;

}

if(ap==NULL){

cout<<"没有需要删除的元素!"<

return false;

}

}

if(cp==NULL)

hl->next=ap->next;

else

cp->next=ap->next;

delete ap;

cout<<"线性表中现在的元素为:"<

travellist(hl);

cout<<"线性表现在的长度为:"<

return true;

}

void mergelist(lnode *&la,lnode *&lb,lnode *&lc)

{

lnode *p1,*p2,*p3;

p1=la->next; p1指向la的第一个元素

p2=lb->next; p2指向lb的第一个元素

p3=lc; p3指向lc

while(p1!=NULL&&p2!=NULL)

{

if(p1->date<=p2->date){

p3->next=p1;

p1=p1->next;

p3= p3->next;

}

else{

p3->next=p2;

p2=p2->next;

p3= p3->next;

}

}

if(p1!=NULL)

p3->next=p1;

else

p3->next=p2;

}

四. 实验结果与分析

相关文档
最新文档