数据结构试验报告.docx

上传人:b****5 文档编号:3266120 上传时间:2022-11-21 格式:DOCX 页数:11 大小:43.06KB
下载 相关 举报
数据结构试验报告.docx_第1页
第1页 / 共11页
数据结构试验报告.docx_第2页
第2页 / 共11页
数据结构试验报告.docx_第3页
第3页 / 共11页
数据结构试验报告.docx_第4页
第4页 / 共11页
数据结构试验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构试验报告.docx

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

数据结构试验报告.docx

数据结构试验报告

华北电力大学科技学院

实验报告

 

实验名称数据结构试验

课程名称数据结构

专业班级:

网络10K1学生姓名:

meter

学号:

10902030125成绩:

指导老师:

张琦实验日期:

2013年3月

实验一顺序表及其应用

一、实验目的及要求

1、实验目的

(1)熟悉VC++上机环境,进一步掌握C语言的结构特点。

(2)掌握线性表的顺序存储结构的定义及C语言实现。

(3)掌握线性表在顺序存储结构即顺序表中的各种基本操作的实现。

(4)掌握栈和队列的顺序表示和实现。

2、实验要求

(1)用顺序存储结构实现栈和循环队列。

(2)编写完整程序完成下面的实验内容并上机运行。

(3)整理并上交实验报告。

二、实验内容

1.约瑟夫环的实现:

设有n个人围坐在圆桌周围,现从某个位置i上的人开始报数,数到m的人就站出来。

下一个人,即原来的第m+1个位置上的人,又从1开始报数,再是数到m的人站出来。

依次重复下去,直到全部的人都站出来,按出列的先后又可得到一个新的序列。

由于该问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为Josephus问题。

例如:

当n=8,m=4,i=1时,得到的新序列为:

4,8,5,2,1,3,7,6

编写程序选择顺序存储方式模拟整个过程,并依次输出出列的各人的编号。

三.源程序:

#include

usingnamespacestd;

#defineMax101

intmain()

{inti,k,out,all,count,start;

intperson[Max];//定义保存每个人的数组

cout<<"-------------------¥¥¥¥¥欢迎进入约瑟夫游戏¥¥¥¥¥--------------------"<

cout<<"Bymeter!

"<

cout<

cout<

cout<<"请输入游戏人数(最大为100):

"<

cin>>all;

cout<<"请输入要数的人数个数:

"<

cin>>count;

cout<<"请输入开始数的位置:

"<

cin>>start;

for(i=1;i<=all;i++)

person[i]=i;//初始化数

cout<<"循环队列初始化完成。

"<

for(inti=1;i<=all;i++)

cout<

cout<

i=start;

if(start>all)//若开始人数大于总人数提示出错

cout<<"error!

\n";

k=0;//123的计数器

out=0;//出局的人数

while(out

{if(person[i]!

=0)//取出后置零

k++;//计数器加一

if(k==count)

{cout<

person[i]=0;//出局后此位置置零

k=0;//计数器置零

out++;//出局人数加一}

i++;//人数后移加一

if(i==all+1)i=1;//当i=最后一个时,让i等于第一

}

for(i=1;i<=all;i++)//循环输出最后一个人

{

if(person[i]!

=0)//判断是否已经输出过

{

cout<

break;}}

cout<<"\n";

system("pause");

return0;

}

四.实验结果:

实验二链表及其应用

一、实验目的及要求

1、实验目的

(1)熟悉VC++上机环境,进一步掌握C语言的结构特点。

(2)掌握线性表的链式存储结构即单链表的定义及C语言实现。

(3)掌握线性表在链式存储结构即单链表中的各种基本操作。

(4)掌握栈和队列的链式存储结构的表示和实现。

2、实验要求

(1)用链式存储结构实现单链表(和单向循环链表)的建立、查找和删除等运算。

(2)编写完整程序完成下面的实验内容并上机运行。

(3)整理并上交实验报告。

二、实验内容

1.约瑟夫环的问题:

设有n个人围坐在圆桌周围,现从某个位置i上的人开始报数,数到m的人就站出来。

下一个人,即原来的第m+1个位置上的人,又从1开始报数,再是数到m的人站出来。

依次重复下去,直到全部的人都站出来,按出列的先后又可得到一个新的序列。

由于该问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为Josephus问题。

例如:

当n=8,m=4,i=1时,得到的新序列为:

4,8,5,2,1,3,7,6

用单向循环链表存储结构模拟此过程。

三源程序:

#include

usingnamespacestd;

#include

#include

typedefstructNode

{

intdata;

structNode*next;

}*Pointer;//声明链表结构

PointercreatList(Pointerhead,intx)//创建链表

{inti;

Pointerp,q;

head=newNode;//申请空间

head->data=x;//修正让第一个节点的data值为最大

p=head;//p为辅助指针指尾节点

for(i=1;i

{q=newNode;//申请空间

if(!

q)exit

(1);//判断是否申请成功

q->data=i;//赋值data等于i

p->next=q;

p=q;//p指向尾节点}

p->next=head;//让尾节点的next域指向头结点

return(head);//返回头结

}

voiddel(PointerPrevious,PointerPoint)//删除节点

{

Previous->next=Point->next;//让要删除的节点的前一个的next域指向要删除节点的next域

free(Point);//释放节点空间

}

intmain(){

cout<<"-------------------¥¥¥¥¥欢迎进入约瑟夫游戏¥¥¥¥¥--------------------"<

cout<<"《循环链表实现》"<

cout<<"Bymeter!

"<

cout<

cout<

intall,count,start,i,j,out;

PointerNode,point,previous,pointer;

Node=NULL;//初始化节点

cout<<"请输入参加游戏总人数\n";

cin>>all;

Node=creatList(Node,all);//创建链表

cout<<"请输入周期\n";

cin>>count;

cout<<"请输入起始位置\n";

cin>>start;

if(start>all)//溢出出错提示

cout<<"error\n";

else

{

cout<<"总人数为:

"<

cout<<"周期:

"<

cout<<"起始位置:

"<

cout<

cout<<"出局的顺序为:

";

point=Node;//point为辅助变量

j=1;//初始化计数器

while(j<=start)

{

previous=point;//前一个指针指向此节点

point=point->next;//此节点指向下一个

j++;//计数器加一

}

out=0;//出局的人数

while(out

{

for(j=1;j

{

point=point->next;//此节点后移

previous=previous->next;//前节点后移

}

cout<data;//打印输出要出局的人

pointer=point->next;//保留point的接口

del(previous,point);//删除此节点

point=pointer;//重新赋值

out++;//出局的人数加一

}

cout<data;//输出最后一个人

delete(point);//释放此节点

cout<

system("pause");

}

return0;

}

四.运行结果:

实验三二叉树

一、实验目的及要求

1、实验目的

(1)通过实验,掌握二叉树的建立与存储

(2)通过实验,掌握二叉树的遍历方法

2、实验要求

(1)二叉树需要用二叉链表作为节点类型描述。

(2)二叉树的遍历递归算法能够转换为非递归算法。

(3)编写完整程序完成下面的实验内容并上机运行。

(4)整理并上交实验报告。

二、实验内容

1、问题描述

利用先序遍历建立一棵二叉树,并分别用前序、中序、后序遍历该二叉树

2、节点形式

Lchild

data

Rchild

3、说明

(1)输入数据:

1,2,3,0,0,4,0,0,5,0,0其中“0”表示空子树。

(2)输出数据:

先序:

1,2,3,4,5

中序:

3,2,4,1,5

后序:

3,4,2,5,1

三、实验步骤

1.建立自己的头文件BT.H,内容包括二叉链表的结构描述、二叉树的建立、二叉树的先序、中序与后序遍历算法。

2.建立二叉树,并通过调用函数,输出先序遍历、中序遍历与后序遍历的结果。

四.源程序

#include

usingnamespacestd;

typedefstructbtnode

{intdata;

structbtnode*Lchild,*Rchild;

}*bitreptr;//声明变量

bitreptrMdPreorder()//先序建立二叉树

{intx;

bitreptrhead;

cout<<"请输入:

";

cin>>x;

if(x==0)head=NULL;

else

{head=newbtnode;//为节点申请空间

if(!

head)cout<<"Error!

";//判断是否申请成功

head->data=x;//赋值给节点的data

head->Lchild=MdPreorder();//左孩子递归调用

head->Rchild=MdPreorder();//右孩子递归调用

}

returnhead;//返回头结点

}

intPreOrder(bitreptrhead)/*先序遍历*/

{if(head!

=NULL)//判断头结点是否为空

{cout<data;//输出数据域

PreOrder(head->Lchild);//递归调用左孩子

PreOrder(head->Rchild);//递归调用右孩子

}

return0;}

intInOrder(bitreptrhead)/*中序遍历*/

{if(head)

{InOrder(head->Lchild);

cout<data;

InOrder(head->Rchild);}

return0;}

intPostOrder(bitreptrhead)/*后序遍历*/

{if(head){

PostOrder(head->Lchild);

PostOrder(head->Rchild);

cout<data;}

return0;

}

intmain()

{bitreptrHead;//申请变量

Head=NULL;//初始化节点

cout<<"☆友情提示:

☆\n\n";

cout<<"☆先序输入一个节点按回车继续下个输入☆\n";

Head=MdPreorder();//建立二叉树

cout<<"先序输出为:

";

PreOrder(Head);//先序输出

cout<<"\n\n";

cout<<"中序输出为:

";

InOrder(Head);//中序输出

cout<<"\n\n";

cout<<"后序输出为:

";

PostOrder(Head);//后序输出

cout<<"\n";

system("pause");

return(0);

}

五.运行结果:

六.实验总结:

1.调试时出现的问题及解决办法:

利用带头结点的尾插法建立链表求解的时候,头节点的作用无法确定,导致编译通过,但是运行之后的结果都不是正确的运行结果。

苦苦思索,包括和同学讨论,一直没能解决,最后决定改用另一种存储方法,将头节点直接改成NULL,最终测试的结果是正确的。

用函数返回存储节点的地址的时候,函数中的一句没有问题的语句出现访问错误,更改函数从而解决了问题。

2.这次做数据结构作业,不仅对开学一段时间内所学的知识有了更好的理解,而且很好地锻炼了自己的编程能力。

发现心中了解程序的主要算法和真正写出来完全不是一回事,一开始做多项式的时候就是先写函数,后定义存储结构等,结果编译报错很多,不知道怎么修改,无奈只好改成做约瑟夫环问题了。

在编程和写报告的过程中曾多次遇到各种各样的问题,通过与同学的交流以及自己独立思考,最终得到解决并顺利的完成了此次作业。

总之一句话,获益良多。

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

当前位置:首页 > 小学教育 > 英语

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

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