为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 实验报告:线性表的插入与删除

实验报告:线性表的插入与删除

2017-11-28 9页 doc 74KB 285阅读

用户头像

is_003124

暂无简介

举报
实验报告:线性表的插入与删除实验报告:线性表的插入与删除 一、 掌握线性表在顺序分配下的插入与删除运算;掌握线性表的链式存储结构;掌握插入排序的方法; 并掌握一种产生随机数的方法。 二、 1. 产生1000个0至999间的随机整数,并以产生的次序存入一个数据文件中。 2. 编制一个程序,依次实现以下功能: (1) 定义一个有序(非递减)线性表,其最大容量为1000,初始时为空。 (2) 从由1产生的数据文件中依次取前N个随机整数,陆续插入到此线性表中,并要求 在每次插入后保持线性表的有序性。最后将此有序线性表打印输出。 (3) 在由(2)...
实验报告:线性表的插入与删除
实验:线性的插入与删除 一、 掌握线性表在顺序分配下的插入与删除运算;掌握线性表的链式存储结构;掌握插入排序的; 并掌握一种产生随机数的方法。 二、 1. 产生1000个0至999间的随机整数,并以产生的次序存入一个数据文件中。 2. 编制一个程序,依次实现以下功能: (1) 定义一个有序(非递减)线性表,其最大容量为1000,初始时为空。 (2) 从由1产生的数据文件中依次取前N个随机整数,陆续插入到此线性表中,并要求 在每次插入后保持线性表的有序性。最后将此有序线性表打印输出。 (3) 在由(2)产生的线性表中,依在1中产生的次序逐个将元素删除,直至表空为止。 3. 以N=100及N=400分别运行2的程序,并比较它们的运行时间。 4. 编写一个程序,用插入排序依次将1中产生的1000个随机整数链接成有序链表(不改 变原随机数在存储空间中的顺序)。 三、 1. 事先编制好实验中1、2、4的程序(可参考本实验中的方法说明),并调试通过。 2. 运行1的程序,生成1000个0至999之间的随机整数的数据文件,并打印输出此数据 文件。 3. 以N=100运行2的程序,并记下运行时间。 4. 以N=400运行2的程序,并记下运行时间。 5. 运行4的程序。 6 整理程序清单和运行结果,写出实验报告。 四、 1a) 建立两个足够大的长整形数组,作为随机数的产生和转换数列; b) 采用递归方式产生随机数,并利用循环将每一项都赋随机值并将其写入新建的文件 num.txt。 2a) 从num.txt中读取随机数组; b) 插入法排序:将待插数值存为right_order[0],从后向前,一旦某个数比待插数大,则 向后移位。完成循环,直至所有数都插入为止; c) 写入right_order.txt; d) 通过逐个查找的方式,比较每一个数,一旦与待删除数据相等,则删除; 3a) 建立打印的函数,链表,数组; b) 读取数据; c) 如果前大后小,则调换链表line[x].next的值改变顺序; d) 执行打印函数; 五、 #include #include FILE *fp; void main() { long int m; long int a[1000],b[1000],i; fp=fopen("num.txt","w"); m=pow(2,16); b[0]=0; for(i=0;i<1000;i++) //生成随机数组 { b[i]=(2053*b[i-1]+13489)%m; a[i]=((1000*b[i])/m); printf("%5d",a[i]); if(i%10==0&&i!=0) printf("\n"); fprintf(fp,"%5d",a[i]); //写入文件num.txt } fclose(fp); getch(); } 运行结果:(由于编译器问无法显示全部随机数) #include FILE *fp,*fp1; void main() { long int x,c[1000],i,order[1000],j,k; fp=fopen("num.txt","r+"); for(i=1;i<=1000;i++) //从num.txt中读取数据 { fscanf(fp,"%ld",&c[i]); } printf("Please input a number:\n"); scanf("%d",&x); printf("\n"); order[1]=c[1]; for (i=1;i<=x;i++) //插入法排序 { j=i-1; while(c[i] #define NULL 0 struct num //建立链表 { long data; struct num *next; }; int n; FILE *fp; void print(struct num*head,int count) //打印链表的函数 { int i; struct num*p; p=head; for(i=0;idata); p=p->next; } } void main() { struct num *head,*p,line[1000]; int m,i,j; printf("How many numbers do you want?\n:"); scanf("%d",&m); head=line; p=line; for (i=0;i<1000;i++) line[i].next=++p; fp=fopen("NUM.txt","r"); //从num.txt中读取随机数 for(i=2;i<=m+2;i++) { fscanf(fp,"%ld",&line[i].data); j=i; while(line[j].data<=line[j-1].data) //通过调换地址改变链表 { line[j-2].next=&line[j]; line[j].next=&line[j-1]; line[j-1].next=&line[j+1]; j--; } } print(head,m); //调用打印函数 getch(); } 运行结果: 六、 1、 由于我采用的是win-tc编译环境,与机房采用的visual c++不同,所以无法实现对于程 序运行时间的判断,所以第二个步骤没有做; 2、 同样由于win-tc的问题,程序运行时无法显示出完整的表,但是从生成的NUM.txt和 RIGHT_OR.txt文件能看出程序运行正常,数组及链表都已生成,只是没有显示出来而已; 3、 实验中的难点是文件的读写、链表的生成及使用、链表及线性表的插入排序及删除操作。 由于实验之前不会使用链表和文件的操作方法,而这方面又是C语言的难点所在,所以没能在要求时间内完成。只能在课后花时间学习链表及文件的内容,才将程序编出来。 所以一定要充分预习,掌握相关的知识,才能不被程序的编写卡住,直接解决算法问题 就可以了。
/
本文档为【实验报告:线性表的插入与删除】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索