资源描述:
《顺序表的归并》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《数据结构与算法设计》实验报告——实验1学院:自动化学院班级:自动化2班学号:1320110130姓名:赵帅一、实验目的:理解抽象数据类型的定义;学会用c语言实现对线性循环链表的基本操作;二、实验内容采用单向环表实现约瑟夫环。三、程序设计1、概要设计:(说明程序中用到的抽象数据类型定义,宏定义,主程序的流程以及各个程序模块之间的调用关系,给出主要流程图)抽象数据类型定义:ADTList{数据对象:D={ai
2、ai∈ElemSet,i=1,2,…,n,n≥0}数据关系:R1={
3、ai-1,ai∈D,i=1,2,…,n
4、}基本操作:Creat(m)操作结果:创见一个具有m个结点的单向环表;}主程序流程:调用函数create构造链表→通过循环依次输出结点编号模块调用关系:主函数main()调用creat()函数。流程图:开始输入想要创建的单向表的结点数m,计数起点s和间隔数n 调用函数创建单向环表找到计数起点S计数到n,并且输出该元素,使结点在链表中删除,m减1.m=0?是结束否2详细设计:数据类型:structele{intno;structele*link;};调用的函数:structeleCreat(m){inti;h=u=(structel
5、e*)malloc(sizeof(structele));/*形成首表元*/h->no=1;for(i=2;i<=m;i++)/*形成其余的m-1个表元*/{u->link=(structele*)malloc(sizeof(structele));u=u->link;u->no=i;/*第i个表元置编号i*/}u->link=h;/*末表元后继首表元,形成环*/}主函数:main(){structele*p,*q;intn,m,i,s;printf("请输入单向环表的结点数:");scanf("%d",&m);/*输入n和m*/C
6、reat(m);printf("请输入计数起点和间隔:");scanf("%d%d",&s,&n);if(s<1
7、
8、s>m)printf("您输入的数据有误");else{printf("输出序列为:");p=h;for(i=1;ilink;/*掠过前s-1个表元*/while(m){for(i=1;ilink;/*掠过n-1个表元*/q=p->link;/*p指向第n个表元*/p->link=q->link;/*第n个表元从环中脱钩*/printf("%4d",q->no);
9、free(q);/*释放第n个表元占用的空间*/m--;}}printf("");}四、程序调试分析(程序运行中遇到的问题与改正措施,以及对程序调试的体会与收获)局部变量和全局变量的使用;一些简单的语法错误;细节决定成败,养成良好的变成习惯十分重要。五、用户使用说明(说明如何使用你的程序,给出操作步骤)打开软件,待显示器上出现“请输入单向环表的结点数:”后:输入想要建立环表的结点数,按“enter”键结束。显示器上显示“请输入计数起点和间隔:”后,输入想要计数的起点按回车键后输入间隔数,按“enter”结束。若显示器上显示“您输
10、入的数据有误!”时说明你输入的为无效数据请查证。六、程序运行结果(列出测试结果,包括输入和输出,最好给出2个测试结果)1,请输入单向环表的结点数:10请输入计数起点和间隔:34输出序列为:610495213872,请输入单向环表的结点数:10请输入计数起点和间隔:124您输入的数据有误!七、程序清单(要求给函数加上注释)#include"stdlib.h"#includestructele{intno;structele*link;};structele*h,*u;//声明全局变量structeleCreat(m)
11、{inti;h=u=(structele*)malloc(sizeof(structele));/*形成首表元*/h->no=1;for(i=2;i<=m;i++)/*形成其余的m-1个表元*/{u->link=(structele*)malloc(sizeof(structele));u=u->link;u->no=i;/*第i个表元置编号i*/}u->link=h;/*末表元后继首表元,形成环*/}main(){structele*p,*q;intn,m,i,s;printf("请输入单向环表的结点数:");scanf("%d"
12、,&m);/*输入n和m*/Creat(m);printf("请输入计数起点和间隔:");scanf("%d%d",&s,&n);if(s<1
13、
14、s>m)printf("您输入的数据有误");else{printf("输出序列为: