实验报告:线性表的插入与删除实验报告:线性表的插入与删除
一、
掌握线性表在顺序分配下的插入与删除运算;掌握线性表的链式存储结构;掌握插入排序的方法;
并掌握一种产生随机数的方法。
二、
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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。