合肥工业大学数据结构试验一实验报告.docx

上传人:b****5 文档编号:28720211 上传时间:2023-07-19 格式:DOCX 页数:19 大小:49.51KB
下载 相关 举报
合肥工业大学数据结构试验一实验报告.docx_第1页
第1页 / 共19页
合肥工业大学数据结构试验一实验报告.docx_第2页
第2页 / 共19页
合肥工业大学数据结构试验一实验报告.docx_第3页
第3页 / 共19页
合肥工业大学数据结构试验一实验报告.docx_第4页
第4页 / 共19页
合肥工业大学数据结构试验一实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

合肥工业大学数据结构试验一实验报告.docx

《合肥工业大学数据结构试验一实验报告.docx》由会员分享,可在线阅读,更多相关《合肥工业大学数据结构试验一实验报告.docx(19页珍藏版)》请在冰豆网上搜索。

合肥工业大学数据结构试验一实验报告.docx

合肥工业大学数据结构试验一实验报告

计算机与信息学院

数据结构实验报告

专业 班级

学生姓名及学号

课程教学班号

任 课 教 师

实验指导教师

实验地点

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;

ﻩ}

三、实验结果分析、考虑题解答∶

四、感想、体会、建议∶

实验成绩∶

指导教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1