合肥工业大学数据结构试验一实验报告.docx
- 文档编号:28720211
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:19
- 大小:49.51KB
合肥工业大学数据结构试验一实验报告.docx
《合肥工业大学数据结构试验一实验报告.docx》由会员分享,可在线阅读,更多相关《合肥工业大学数据结构试验一实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
合肥工业大学数据结构试验一实验报告
计算机与信息学院
数据结构实验报告
专业 班级
学生姓名及学号
课程教学班号
任 课 教 师
实验指导教师
实验地点
2015~2016 学年第2学期
ﻬ说 明
实验报告是关于实验教学内容、过程及效果的记录和总结,因此,应注意以下事项和要求:
1、每个实验单元在4页的篇幅内完成一份报告、“实验单元”指依照实验指导书规定的实验内容。
若篇幅不够,可另附纸。
2、各实验的预习部分的内容是进入实验室做实验的必要条件,请按要求做好预习。
3、实验报告要求:
书写工整规范,语言表达清楚,数据和程序真实、理论联系实际,认真分析实验中出现的问题与现象,总结经验。
4、参加实验的每位同学应独立完成实验报告的撰写,其中程序或相关的设计图纸也能够采纳打印等方式粘贴到报告中。
严禁抄袭或拷贝,否则,一经查实,按作弊论取,并取消理论课考试资格。
5、实验报告作为评定实验成绩的依据。
实验序号及名称:
实验一 单链表实验
实验时间∶ 2016年5月
预习内容
一、实验目的和要求∶
(1)理解线性表的链式存储结构。
(2)熟练掌握动态链表结构及有关算法的设计。
(3)依照具体问题的需要,设计出合理的表示数据的链表结构,设计相关算法。
二、实验任务∶
说明1:
本次实验中的链表结构均为带头结点的单链表。
说明2:
为使实验程序简洁直观,下面的部分实验程序中将所需要的函数以调用库函数的形式给出,并假设将库函数放在程序文件“linklist、h”中,同时假设该库函数文件中定义了链表结构中的指针类型为link,结点类型为node,并定义了部分常用运算、
例如构建链表、以某种方式显示链表、从文件中读入一个链表、跟踪访问链表结点等。
各运算的名称较为直观,并有相应的注释,因而易于理解和实现。
三、实验准备方案,包括以下内容:
(硬件类实验:
实验原理、实验线路、设计方案等)
(软件类实验:
所采纳的核心方法、框架或流程图及程序清单)
实验准备方案:
构建库函数:
定义了链表结构中的指针类型为link,结点类型为node,并定义了部分常用运算,如构建链表,显示链表,读取链表,访问链表等;
流程:
略
实验内容
一、实验用仪器、设备:
个人计算机
C—free5、0
二、实验内容与步骤(过程及数据记录):
<1>求链表中第i个结点的指针(函数),若不存在,则返回NULL。
实验测试数据基本要求:
第一组数据:
链表长度n≥10,i分别为5,n,0,n+1,n+2
第二组数据:
链表长度n=0,i分别为0,2
node*list:
:
address(inti)
{
ﻩnode *p= head—>next;
ﻩintn=1;
while(n!
=i&&p !
=NULL)
ﻩ{
ﻩﻩp=p->next;
ﻩﻩn++;
}
ﻩif(p!
=NULL)return p;
ﻩelse returnNULL;
}
第一组数据
第二组数据
〈2>在第i个结点前插入值为x的结点。
实验测试数据基本要求:
第一组数据:
链表长度n≥10,x=100,i分别为5,n,n+1,0,1,n+2
第二组数据:
链表长度n=0,x=100,i=5
errorcodelist:
:
insert(const inti, constint x)
{
node*p;
ﻩp =head;
intn= 1;
while(n!
= i&&p!
=NULL)
{
ﻩp= p->next;
ﻩn++;
}
if(i〈1|| i>length()+1)returnrangeerror;
node*s= newnode;
ﻩs->data=x;
s-〉next = p-〉next;
ﻩp->next= s;
count++;
returnsuccess;
}
<3>删除链表中第i个元素结点、
实验测试数据基本要求:
第一组数据:
链表长度n≥10,i分别为5,n,1,n+1,0
第二组数据:
链表长度n=0,i=5
errorcodelist:
:
delete_ele(constinti)
{
ﻩnode*p;
ﻩp =head;
ﻩintn=1;
while(n!
=i&&p !
=NULL)
{
ﻩp= p—〉next;
n++;
}
ﻩif(i〈1||i〉count)return rangeerror;
node*u;
u =p-〉next;
ﻩp—>next=u—>next;
count--;
deleteu;
returnsuccess;
}
<4〉在一个递增有序的链表L中插入一个值为x的元素,并保持其递增有序特性。
实验测试数据基本要求:
链表元素为 (10,20,30,40,50,60,70,80,90,100),
x分别为25,85,110和8
errorcodelist:
:
orderinsert(intx)
{
ﻩnode*p=head;
int n = 1;
while (p->next!
= NULL)
{
ﻩif (p-〉next-〉data <x) p=p->next;
ﻩelse break;
ﻩ}
node *u=newnode;
ﻩu->data=x;
ﻩu-〉next=p->next;
p-〉next=u;
ﻩcount++;
returnsuccess;
}
<5>将单链表L中的奇数项和偶数项结点分解开,并分别连成一个带头结点的单链表,然后再将这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对比求解结果。
实验测试数据基本要求:
第一组数据:
链表元素为(1,2,3,4,5,6,7,8,9,10,20,30,40,50,60)
第二组数据:
链表元素为(10,20,30,40,50,60,70,80,90,100)
void separate(list&A,list&B,list&C){
ﻩnode*LA;node*LB;node*p;node*q;node*u;node*s;
ﻩLA=A。
get_head();LB=B、get_head();
q=LA;p=LA—〉next;s=LB;
ﻩif(p->data%2==0){
ﻩu=p;p=p->next;q—>next=p;
ﻩs-〉next=u;
ﻩs=s->next;
ﻩ}
else{
ﻩﻩp=p—>next;q=q—〉next;
ﻩ}
ﻩ}
<6>求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链表L3。
实验测试数据基本要求:
第一组
第一个链表元素为 (1,3,6,10,15,16,17,18,19,20)
第二个链表元素为(1,2,3,4,5,6,7,8,9,10,18,20,30)
第二组
第一个链表元素为 (1,3,6,10,15,16,17,18,19,20)
第二个链表元素为(2,4,5,7,8,9,12,22)
第三组
第一个链表元素为()
第二个链表元素为(1,2,3,4,5,6,7,8,9,10)
bingji(list A,listB,list&C){
node*LA;node*LB; node*LC;node*a;node*b;
LC=C、get_head();
LA=A、get_head(); LB=B、get_head();
a=LA->next;b=LB->next;
ﻩwhile(a!
=NULL&&b!
=NULL){
ﻩﻩif(a-〉datadata)a=a->next;
ﻩelse if(a—>data>b->data)b=b—>next;
else{
ﻩnode*c=newnode;
ﻩc->data=a—>data;
ﻩﻩﻩLC-〉next=c;LC=c;
ﻩﻩC、count++;
ﻩa=a—>next;b=b—>next;
}
ﻩLC-〉next=NULL;ﻩ
ﻩ ﻩ}
CPP文件附加:
#include <iostream。
h〉
#include〈math。
h>
enum error_code{success,arrange_error};
typedefstructnode{
intdata;
node*next;
}node;
classlist{
public:
list();
intlength()const;
~list(){};
node*get_element(intlocate)const;
node*locate(constintx)const;
error_codecharu(constinti);
error_code insert(constintlocate,constinti);
error_codedelete_element(constint i);
node*get_head(){returnhead;}
void separate(list&A,list&B);
intbingji(listA,listB,list&C);
voidcreate_R();
voidlist:
:
show();
private:
intcount;
node*head ;
node*rear;
};
list:
:
list(){
head=newnode;
head->next=NULL;
count=0;
}
int list:
:
length()const{
node*p=head->next;
int count=0;
while(p!
=NULL){
count++;
p=p->next;
}
returncount;
}
voidlist:
:
create_R(){
ﻩintx;
cout〈<"请输入链表中的数值,按-1后结束创建"<〈endl;
ﻩcin>〉x;
node*rear=head;
ﻩwhile(x!
=—1){
ﻩcount++;
node*s=newnode;
ﻩs—〉data=x;
ﻩrear—〉next=s;
ﻩrear=s;
ﻩrear->next=NULL;
cin>>x;
ﻩ}
ﻩ}
node*list:
:
get_element(intlocate)const{
if(count==0)return0;
else{
ﻩ
ﻩif(locate<=0||locate>=count)
ﻩ
return0;
else{
ﻩnode*p=head;intk=0;
ﻩwhile(p!
=NULL&&k〈locate){
p=p—〉next;k++;
ﻩ}
ﻩreturn p;
}
ﻩ}ﻩ
}
void list:
:
show(){
node*p=head;
ﻩwhile(p!
=NULL){
ﻩcout<<p->data<<"\t";
p=p—>next;
}
}
error_codelist:
:
insert(constintlocate,constinti){
if(count==0){
node*s=newnode;
ﻩﻩs—〉data=i;
s—〉next=NULL;
head—>next=s;
ﻩrear=s;
ﻩcount=1;
ﻩﻩreturnsuccess;
}
else{
ﻩif (locate<1||locate〉count+1)
ﻩreturnarrange_error;
ﻩelse{
ﻩnode*p=head;intj=0;
ﻩﻩwhile(j!
=locate—1&&p!
=NULL){
ﻩp=p->next;j++;}
node*s=newnode;
ﻩs->data=i;
ﻩs->next=p—>next;
p->next=s;
ﻩﻩcount++;
ﻩreturnsuccess;
ﻩ ﻩ}
ﻩ }
}
error_codelist:
:
charu(constinti){
node*p=head;
while(p!
=NULL&&p—〉next!
=NULL){
if(p—>data<=i&&i<=p->next->data){
node*s=new node;
s-〉data=i;
s—>next=p->next;
p—〉next=s;
count++;}
elsep=p—>next;}
if(p-〉next==NULL){
ﻩ node*s=new node;
s-〉data=i;
s->next=NULL;
p-〉next=s;
count++;
}
returnsuccess;
}
error_codelist:
:
delete_element(constinti){
node*p=head; intj=0;
while(j!
=i—1&&p!
=NULL){
ﻩp=p-〉next;j++;
}
if(i<1||i〉count)
return arrange_error;
node*u=newnode;
u=p—〉next;
p-〉next=u->next;
delete u;
count--;
return success;ﻩ
}
voidseparate(list&A,list&B){
node*LA;node*LB;node*p;node*q;node*u;node*s;
LA=A。
get_head();LB=B。
get_head();
q=LA;p=LA->next;s=LB;
while(p!
=NULL){
ﻩif(p-〉data%2==0){
ﻩ u=p;p=p->next;q->next=p;
ﻩﻩs—>next=u;
ﻩs=s->next;
ﻩ}
else{
ﻩﻩp=p—〉next;q=q—>next;
ﻩ}
ﻩ}
}
voidseparate(list&A,list&B,list&C){
node*LA;node*LB;node*p;node*q;node*u;node*s;
LA=A、get_head(); LB=B、get_head();
ﻩq=LA;p=LA—>next;s=LB;
if(p->data%2==0){
ﻩﻩu=p;p=p—>next;q—>next=p;
ﻩﻩs->next=u;
s=s->next;
ﻩﻩ}
else{
ﻩﻩp=p->next;q=q->next;
ﻩ}
}
intlist:
:
bingji(list A,listB,list&C){
node*LA;node*LB;node*LC;node*a;node*b;
LC=C、get_head();
LA=A、get_head();LB=B、get_head();
ﻩa=LA->next;b=LB—>next;
ﻩwhile(a!
=NULL&&b!
=NULL){
ﻩﻩif(a—>data〈b-〉data)a=a->next;
ﻩ elseif(a-〉data>b—>data)b=b-〉next;
ﻩﻩelse{
ﻩ ﻩnode*c=new node;
ﻩc—>data=a->data;
ﻩﻩLC-〉next=c;LC=c;
ﻩC。
count++;
a=a->next;b=b->next;
}
LC-〉next=NULL;ﻩ
ﻩ}
ﻩ
returnsuccess;}
intmain()
{
ﻩ
int choice;
inti;
listA;
listB;
listC;
do
{//显示主菜单
cout<<" \n";
cout<<” \n";
cout<<" 主菜单 \n";
cout〈<” \n";
cout〈〈" ***********************************************"〈 cout<〈" \n"; ﻩcout〈〈" 1-创建链表 2-求第i个节点指针\n"; cout<<” \n"; ﻩcout<<” 3-在第i个节点前插入一个数4—删除链表中的第i个节点\n"; ﻩﻩcout<<" \n”; cout〈〈" 5-分离链表 6—求公共元素\n”; cout〈<” \n”; cout<<" 7-插入一个数 8—退出\n"; ﻩcout<<" \n”; cout<<" ***********************************************”<〈endl; ﻩﻩcout〈<”Enterchoice: "; ﻩcin>>choice; ﻩswitch(choice) ﻩ{ ﻩﻩ ﻩcase 1: ﻩ{ ﻩﻩﻩA。 create_R(); ﻩﻩB、create_R(); ﻩﻩA、length(); ﻩB、length(); ﻩﻩbreak; ﻩ} ﻩﻩ ﻩcase2: ﻩ ﻩﻩ{ ﻩﻩintk; ﻩcout<<”qingshuruk\n”; ﻩﻩﻩcin>>k; ﻩﻩﻩif(A。 get_element(k)==NULL) ﻩﻩﻩcout〈〈NULL〈〈endl; ﻩelse ﻩcout〈data<<endl; break; ﻩﻩ} ﻩ ﻩcase3: ﻩﻩ{ A。 length(); inta,b; cout<<”请输入a,b\n"; cin>>a〉〉b; ﻩ A。 insert(a,b); A。 show(); ﻩbreak;} ﻩﻩﻩ ﻩﻩcase4: { ﻩA。 length(); ﻩﻩinti; ﻩcout〈〈"请输入一个值\n”; cin〉>i; ﻩﻩif(i==0||i>A、length()) ﻩcout〈<"NULL\n"; else A。 delete_element(i); A、show(); break; ﻩﻩ} ﻩcase5: ﻩﻩﻩ{ ﻩﻩ A、show(); separate(A,B); A、show(); B。 show(); ﻩ} ﻩﻩ ﻩﻩcase6: ﻩ{ ﻩﻩﻩﻩA。 show(); B、show(); A、bingji(A,B,C); C、show(); ﻩﻩﻩ} ﻩﻩcase7: ﻩﻩ{ inti; ﻩ cout〈<"请输入一个数\n"; ﻩﻩﻩcin〉>i; ﻩﻩA、charu(i); A。 show(); ﻩﻩﻩ} ﻩcase8: ﻩ{ ﻩcout〈〈”结束运行”<〈endl; ﻩﻩbreak; ﻩ} ﻩﻩﻩ} ﻩ}while(choice! =7); ﻩreturn 0; ﻩ} 三、实验结果分析、考虑题解答∶ 四、感想、体会、建议∶ 实验成绩∶ 指导教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 合肥 工业大学 数据结构 试验 实验 报告