数据结构上机实验报告

合集下载

东华大学数据结构上机实验报告

东华大学数据结构上机实验报告

东华大学信息科学与技术学院实验报告实验名称:线性表的基本操作指导教师:学生姓名:学生学号:实验日期:2012/11一、实验目的1、熟悉C或VC++语言上机环境。

2、会定义线性表的顺序存储结构和链式存储结构。

3、熟悉顺序表和单链表的一些基本操作和应用。

4、加深对线性表的理解,逐步培养解决实际问题的编程能力。

二、实验环境运行C或VC++的微机。

三、实验内容:分别使用顺序表和单链表存储结构实现以下操作:1.建立线性表L={12,13,21,24,28,31,42,77};2.在第5个元素之前插入26;3.删除第5个元素28;4.查找28。

四、实验设计思路及算法流程(一)使用顺序表实现操作:建立顺序表,完成顺序表的基本操作:初始化、插入、删除、输出、查找元素、判线性表是否为空;问题分析:利用顺序表,设计一组输入数据,能够对顺序表进行如下操作:创建一个新的顺序表,实现动态空间分配的初始化;已给定的值插入到指定位置和删除指定位置的值,形成有序顺序表;按值查找,根据给定数据元素的值,查找该元素的位置,对查找结果进行返回;实现顺序表的各个元素的输出;“初始化算法”的操作结果:构造一个空的顺序线性表,对顺序表的空间进行动态管理,实现动态分配、回收和增加存储空间;“位置插入算法”的初始条件:顺序线性表L已存在,给定的元素位置为i,且1≤i≤ListLength(L)+1 ;其操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1;“位置删除算法”的初始条件:顺序线性表L已存在,1≤i≤ListLength(L) ;其操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 ;“输出算法”的初始条件:顺序线性表L已存在;其操作结果:依次对L的每个数据元素进行输出;“按值查找算法”初始条件:顺序线性表L已存在,元素值为e;其操作结果:返回L 中数据元素值为e的元素位置;线性表的顺序存储结构的定义及其基本操作的参考程序(顺序表)文件一:pubuse. h 是公共使用的常量定义和系统函数调用声明。

数据结构上机实验报告

数据结构上机实验报告
{if(i%2==0) insert(lb,i/2,la.list[i]); //奇数位次元诩插入lb
else insert(lc,i/2,la.list[i]); //偶数位次元素插入lc
}
printf("\n您输入的线性表元素为:\n\n");
print(la);
printf("线性表的奇数位次的元素为:\n\n");
print(lb);
printf("线性表的偶数位次的元素为:\n\n");
print(lc);
}
void initial(sqlist &v)
{printf(" ****本程序可以实现线性表奇偶位序的元素分别输出****\n\n\n");
int i,a;
printf("请输入一个偶数作为线性表的长度:\n\n");
void initlist(sqlist &);
void print(sqlist); //输出线性表
void main()
{printf(" *****************本程序可以实现线性表的复制******************\n");
sqlist la,lb; //声明线性表
initial(la);
【程序设计细想】:
建立三个线性表la,lb,lc,对线性表la进行输入,然后利用循环结构对la中奇数位序的元素对lb进行插入操作,对偶数位序的元素对lc进行插入操作,从而得到线性表lb和lc。
【程序代码】:
#include<stdio.h>
#include<malloc.h>

数据结构集中上机实验报告

数据结构集中上机实验报告

XX大学信息与计算科学专业2008级《数据结构》集中上机设计题目:迷宫求解(非递归求解)设计时间:2010-2011学年第一学期目录一、实验内容 (2)二、需求分析 (2)三、总体设计 (2)(一)存储结构 (2)(二)流程图 (3)四、详细设计 (3)(一)基本算法解析 (3)(二)为实现算法,需要的象的数据类型 (4)(三)函数的调用关系 (5)(四)算法时间、空间复杂度 (5)五、代码 (5)六、运行结果分析 (10)(一)迷宫路径探索成功 (10)(二)迷宫路径未找到的情况 (13)(三)程序的优缺点与改进 (13)七、参考文献 (14)八、心得体会 (14)一、实验内容任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。

二、需求分析1、可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;要求使用非递归算法。

2、用户可以根据自己的需求进行输入所需的迷宫,其中1表示迷宫的墙壁,0表示迷宫的通路,从而建立迷宫。

3、可以自行输入迷宫的入口和出口坐标。

4、程序执行的命令包括:(1)构造栈函数。

其中包括了构造空栈InitStack;压入新数据元素Push;栈顶元素出栈Pop。

(2)构造求迷宫路径函数。

其中定义了二维数组maze[M][N]存取迷宫数据;输出找到的通路MazePath。

(3)建立一个迷宫initmaze。

其中包括输入迷宫行数列数以及各行各列;加一圈围墙并输出迷宫。

三、总体设计(一)存储结构:首先用二维数组存储迷宫数据,迷宫数据由用户输入。

一个以链表结构作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

求得的通路以三元组(i,j,d)形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东南西北所用代表数字,自行定义)。

1.从入口出发,顺着某一个方向进行探索,若能走通,继续往前走,否则沿原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

数据结构上机报告

数据结构上机报告

数据结构上机报告班级:通信工程1405 姓名:李笑阳学号:U201413536一.约瑟夫环1.需求分析①.约瑟夫问题的一种描述是:编号为1,2,……,n点的n个人按顺时针方向围坐一个圈,每人持有一个密码。

一开始选一个正整数作为报数上限值m,从第一个人开始从顺时针方向自1开始报数,报到m时停止。

报到m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始从新从1报数,如此下去,直达所有人出列。

②.基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各人的编号。

③.演示程序提示用户输入其总人数,然后依此输入每个人的数字,程序按照出列的顺序输出各人的编号。

测试数据:m的初始值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,首先m 的值为6(正确的出列顺序为6,1,4,7,2,3,5)2.设计概要①循环链表的结点类型定义typedef struct LNode②.创建链表模块LinkList creatList_L(int n)③.删除链表并释放空间模块void ListDelete_L(LinkList L,int key,int n)④.主函数模块(约瑟夫环的实现)Void main()3.具体代码实现#include<stdio.h>#include<malloc.h>//定义结构体typedef struct LNode{int password,num;struct LNode *next;}LNode,*LinkList;//创建链表LinkList creatList_L(int n){LinkList p,head,q;int i=1,key;head=(LinkList)malloc(sizeof(LNode));p=head;for(i=1;i<=n;i++) //进入循环赋值{scanf("%d",&key);q=p;p=(LinkList)malloc(sizeof(LNode));p->num=i;p->password=key;q->next=p;}p->next=head->next;free(head); ////现在的p节点是列表的尾节点把尾节点的下一个指向头结点//也就是形成了一个环head=p->next;return (head);}//输出并删除列表void ListDelete_L(LinkList L,int key,int n){LinkList p,s;int j=1;while(n>0){p=L;//key是人数上限M==key 现在开始循环叫数叫到M的输出//并从循环链表中删除for(j=1;j<key;j++){s=p;p=p->next;}printf("%2d %5d\n",p->num,p->password);key=p->password;//s是p的上一个节点,现在把s的下一个节点指向p的下一个s->next=p->next;L=p->next;//释放p节点free(p);//链表总数减一,一直到n==0时退出while循环n--;}}void main(){LinkList s;int n,m;printf("请输入总人数N和上限数M:");scanf("%d%d",&n,&m);printf("请输入%d个人的密码:",n);s=creatList_L(n); //调用创建列表printf("序号密码\n");ListDelete_L(s,m,n); //调用输出并删除列表}4.运行分析①.运行结果②.复杂度的分析时间复杂度为O(n2),空间复杂度为O(n)5.实验总结这个算法中的主函数只完成输入输出,其他都是通过调用完成。

数据结构上机实验报告

数据结构上机实验报告

数据结构上机实验报告学院:电子工程学院专业:信息对抗技术姓名:学号:教师:饶鲜日期:目录实验一线性表 ........................................................................................................ - 4 -一、实验目的.................................................................................................... - 4 -二、实验代码.................................................................................................... - 4 -三、实验结果.................................................................................................. - 14 -四、个人思路.................................................................................................. - 15 - 实验二栈和队列 .................................................................................................. - 15 -一、实验目的.................................................................................................. - 15 -二、实验代码.................................................................................................. - 16 -三、实验结果.................................................................................................. - 24 -四、个人思路.................................................................................................. - 25 - 实验三数组 .......................................................................................................... - 26 -一、实验目的.................................................................................................. - 26 -二、实验代码.................................................................................................. - 26 -三、实验结果.................................................................................................. - 28 -四、个人思路.................................................................................................. - 28 - 实验四树 .............................................................................................................. - 29 -一、实验目的.................................................................................................. - 29 -二、实验代码.................................................................................................. - 29 -三、实验结果.................................................................................................. - 39 -四、个人思路.................................................................................................. - 39 -实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验代码1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

数据结构上机实习报告

数据结构上机实习报告

上机实习报告班号:116112姓名:**学号:***********实习报告【实习一】线性表及其应用n(n>20)的阶乘【问题描述】大数运算——计算n的阶乘(n>=20)。

【基本要求】(1)数据的表示和存储:(1.1)累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求;(1.2)试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。

(2)数据的操作及其实现:基于设计的存储结构实现乘法操作,要求从键盘上输入n值,在屏幕上显示最终计算结果。

【问题分析】(1)设计数据的存储结构:介于乘运算的精确性以及实型数据表示的不精确性,本题不能采用实型表示累积运算的中间结果和最终的计算结果,而只能用整型。

然而由于普通整型和长整型所能表述数的范围受其字长的限制,不能表示大数阶乘的累积结果,故必须设计一个合适的数据结构实现对数据的存储,例如可以让每个元素或结点存储数据的若干位数值。

从问题描述不难看出n值为任意值,故为使程序尽量不受限制,应采用动态存储结构。

累积运算的特点是当前的计算结果是下次乘法运算的乘数。

实现两个数的乘法运算须考虑:(1)乘数的各位数都要与被乘数进行乘法运算;(2)乘法过程中的进位问题及其实现;(3)因每个元素或结点最多存储数据的3位数值,故当元素或结点中的数值大于999,需向前一个元素或结点进位。

综合以上几点,我采用了单链表的储存结构形式。

(2)阶乘算法的实现:1. 链表型数据乘法的具体实现描述:(1)初始算法顺序访问对每个节点上的数据乘以要乘的数后在顺序访问查看是否需要进位,大于999则向前进位,如果前面没有节点则添加新节点储存进位的数(2)改进算法将原始算法的乘操作和进位操作合在一起进行,提高程序效率.2. 数据输出算法具体实现描述从高位向低位顺序输出节点上储存的数据,注意补零,最高位的节点不补,其它节点要补。

对于最后的结果,因为我采用的是普通的单链表算法,因此我添加了一个逆置的算法。

数据结构集中上机过桥问题详细实验报告

数据结构集中上机过桥问题详细实验报告

数据结构项目集中上机实践报告姓名:学号:班级:学院:计算机科学与技术专业:计算机科学与技术指导老师:1.实验题目三件有制约关系物品过河问题(80分)有一人要将自己的兔子、蔬菜和狐狸等三件物品运过河。

但过河所用的船每次只能装其中的两件,而这三件物品之间又存在一定的制约关系:兔子不能单独和狐狸以及不能和蔬菜在一起,因为狐狸要吃兔子,兔子也能吃蔬菜。

试构造出问题模型,并编程实现这一问题的求解。

2.数据结构及其存储结构(1)选择对应的数据结构,用图来解决。

(2)选择存储结构,由于问题的规模很小,且总的状态种类很少,所以,我选择邻接矩阵作为图的存储结构。

3.算法的基本思想及分析对象:农夫farmer,狐狸fox,兔子rabbit,蔬菜vegetable。

兔子不能单独和狐狸以及不能和蔬菜在一起,因为狐狸要吃兔子,兔子也能吃蔬菜,如图:农夫兔子狐狸蔬菜算法的思想其实很简单,首先在创建结点,利用is_safe()函数将不安全的结点全部排除,再利用is_connected()函数得到每个结点的后继结点。

之后利用深度优先搜索可以找到实现这一问题的路径。

问题的分析:①每一个物体都只有两个状态,在原岸或者在对岸;②不同的状态,如农夫和羊在对岸,狼和白菜在原岸;③从一个状态安全地转到另外几个状态,如农夫自己过河或农夫带着羊过河;④不安全状态,如农夫在对岸,其他东西在原岸;⑤初始状态(都在原岸),结束状态集(都在对岸)。

建立模型:首先,采用二进制中的0/1表示每一个物体的两种状态,用一个四位的二进制数表示一种整体的状态,这样就使原来的问题变的更加易于理解,有利于我们找到合适的数据结构类型来实现问题。

根据对象的状态分为过河(1)和不过河(0),此对象集合就构成了一个状态空间。

问题关键是在这个状态空间内寻找一条从开始状态到结束状态都安全的路径。

其初始状态为四个对象都不过河(都为0),结束状态为四对象全部过河(都是1)。

从一个状态到另一个状态,这其中可以根据相互之间的制约关系,排除不安全的状态,得到安全的路径。

《数据结构》上机实验报告—常用排序算法的实现

《数据结构》上机实验报告—常用排序算法的实现
return OK;
}
int InsertSort(Form &F)
{//对顺序表F作直接插入排序
int i,j;
int comp=0;//比较次数
int move=0;//移动次数
for(i=2;i<=F.length;i++)
{
comp++;
if(F.r[i].key<F.r[i-1].key)
{
high--;
move++;
}
F.r[low]=F.r[high];
if(low<high&&F.r[low].key<=p)
{
low++;
move++;
}
F.r[high]=F.r[low];
}
F.r[low]=F.r[0];
return low;
}
void main()
{
Form F;
Init_Form(F);
{
F.r[0]=F.r[i]; //F.r[0]是监视哨
F.r[i]=F.r[i-1];
j=i-2;
comp++;
if(F.r[0].key<F.r[j].key)
{//进行元素移动,以腾出位置插入F.r[i]
F.r[j+1]=F.r[j];// 记录后移
j--;
move++;
}
F.r[j+1]=F.r[0]; //在j+1处插入F.r[i]
2.实现快速排序算法。
3.实现折半插入排序。
4.采用几组不同数据测试各个排序算法的性能(比较次数和移动次数)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构上机实验报告
数据结构上机实验报告
1、实验目的
本次实验旨在通过实践,加深对数据结构中各种基本数据结构
和算法的理解,并掌握其应用方法,提高编程实践能力。

2、实验内容
2.1 实验环境
2.1.1 硬件环境:
- 计算机配置:操作系统,处理器,内存
- 其他硬件设备:无
2.1.2 软件环境:
- 开发工具:版本
- 编程语言:版本
- 其他相关软件:无
2.2 实验任务
2.2.1 任务一、线性表的基本操作实现
- 需要实现线性表的初始化、插入、删除、查找等基本操作。

- 使用自定义的数据结构实现线性表,例如顺序表或链表。

2.2.2 任务二、栈和队列的基本操作实现
- 需要实现栈和队列的初始化、压栈、弹栈、入队、出队等基本操作。

- 使用自定义的数据结构实现栈和队列。

2.2.3 任务三、树和图的基本操作实现
- 需要实现树和图的初始化、遍历、添加节点、删除节点等基本操作。

- 使用自定义的数据结构实现树和图。

2.3 实验步骤
2.3.1 任务一实现步骤:
1、按照实验要求,设计并实现线性表的初始化函数。

2、根据实验要求,编写线性表的插入函数,可以在指定位置插入元素。

3、编写线性表的删除函数,可以删除指定位置的元素。

4、实现线性表的查找函数,可以根据元素值查找对应位置。

2.3.2 任务二实现步骤:
1、设计并实现栈的初始化函数。

2、编写栈的压栈函数,将元素添加到栈顶。

3、实现栈的弹栈函数,将栈顶元素弹出。

4、设计并实现队列的初始化函数。

5、编写队列的入队函数,将元素添加到队尾。

6、实现队列的出队函数,将队首元素出队。

2.3.3 任务三实现步骤:
1、设计并实现树的初始化函数。

2、编写树的遍历函数,可以按照先序、中序、后序等方式遍历树的节点。

3、实现树的添加节点函数,可以在指定节点下添加子节点。

4、编写树的删除节点函数,可以删除指定节点及其子节点。

5、设计并实现图的初始化函数。

6、编写图的遍历函数,可以按照广度优先或深度优先方式遍历图的节点。

7、实现图的添加节点函数,可以添加新的节点。

8、编写图的删除节点函数,可以删除指定节点及其相关边。

3、实验结果
根据上述任务实现的各个函数,进行了测试,得到了如下实验
结果:
- 任务一、线性表的基本操作实现正常,能够初始化、插入、
删除和查找元素。

- 任务二、栈和队列的基本操作实现正常,能够进行压栈、弹栈、入队、出队操作。

- 任务三、树和图的基本操作实现正常,能够进行遍历、添加
节点和删除节点操作。

4、实验总结
通过本次数据结构上机实验,我对线性表、栈、队列、树和图
等基本的数据结构有了更深入的理解,掌握了它们的基本操作方法,并提高了编程实践能力。

在实验过程中,我遇到了一些困难和问题,但通过查阅参考资料、与同学讨论等方式,最终解决了这些问题。

附件:
- 代码文件::cpp
- 测试数据文件::txt
法律名词及注释:
1、版权法:指保护著作权人对其创作作品的法律法规,授权著作权人对其创作的作品享有原创权和发布权。

2、专利法:指保护发明创造的法律法规,授权发明者对其发明创造享有独占权,防止他人未经许可使用、制造、销售该项发明。

3、商标法:指保护商业标识权益的法律法规,授权商标注册人对其商标享有专有权益,防止他人在同类或相近商品或服务上使用相同或相似的商标。

相关文档
最新文档