计算机软件基础实验报告2.docx
- 文档编号:10778733
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:16
- 大小:95.74KB
计算机软件基础实验报告2.docx
《计算机软件基础实验报告2.docx》由会员分享,可在线阅读,更多相关《计算机软件基础实验报告2.docx(16页珍藏版)》请在冰豆网上搜索。
计算机软件基础实验报告2
北京联合大学
实验报告
课程(项目)名称:
计算机软件技术基础(实验2)
学院:
自动化学院专业:
电气工程与自动化
班级:
0910030101学号:
2009100301126
姓名:
林驷淇成绩:
2011年 4 月 24 日
一、任务与目的
1.实验目的
(1)掌握链表的概念。
(2)熟练掌握线性表的链式存储结构。
(3)熟练掌握线性表在链式存储结构上的运算。
2.实验内容
(1)编写算法,根据用户输入的整数创建一个带头结点的单链表,-1作为输入数据的结束符。
测试要求:
建立空链表、非空链表的情况下测试程序运行情况。
(2)编写算法,在带有头结点的单链表中查找序号为i的结点和值为x的结点并输出。
测试要求:
在空链表、i与x在链表头、i与x在链表尾、i与x在链表中间、i与x在链表中不存在的情况下测试程序运行情况。
(3)己知单链表中的元素非递减有序排列,编写算法删除单链表中值相同的多余的元素。
测试要求:
在空链表、有1组相同元素、有2组连续相同元素、有2组以上不连续相同元素的情况下测试程序运行情况。
(4)已知单链表中的数据元素递增有序,编写算法,给定的两个数据Min和Max,删除表中值在min与max之间的结点。
测试要求:
在空链表、max小于链表第1个元素值、min大于链表最后1个元素值、min与max在链表中间的情况下测试程序运行情况。
二、原理(条件)
VisualC++6.0
三、内容与步骤
(1)编写算法,根据用户输入的整数创建一个带头结点的单链表,-1作为输入数据的结束符。
测试要求:
建立空链表、非空链表的情况下测试程序运行情况。
测试数据为:
10,9,8,7,6,5,4,3,2,1
主函数内的代码:
linklist*createlist()
{
intt;
linklist*head,*s,*r;//s为新建结点,r为尾结点
head=(linklist*)malloc(sizeof(linklist));//开辟空间,建立一个头结点
r=head;
printf("请输入数字序列,产生单链表,以-1结束。
\n");
scanf("%d",&t);
while(t!
=-1)
{
s=(linklist*)malloc(sizeof(linklist));
s->data=t;
r->next=s;
r=s;
scanf("%d",&t);
}
r->next=NULL;
returnhead;
}
运行结果:
(2)编写算法,在带有头结点的单链表中查找序号为i的结点和值为x的结点并输出。
测试要求:
在空链表、i与x在链表头、i与x在链表尾、i与x在链表中间、i与x在链表中不存在的情况下测试程序运行情况。
主函数内的代码:
voidfindi(linklist*head)//查找结点为i的值
{
linklist*p,*q;
inti=0,j=0;
printf("输入要查找的结点:
\n");
scanf("%d",&i);
if(i==1)
q=head->next;
else
{
p=head->next;
j=1;
while(p!
=NULL)
{
p=p->next;
j++;
if(i==j)
{
q=p;
break;
}
}
}
if(p==NULL)
{
printf("超出范围,不存在");
}
else
{
printf("查找的元素为:
");
printf("%d\n",q->data);
}
}
测试数据:
查找结点为3的值
运行结果:
voidfindx(linklist*head)//查找值为x的结点
{
linklist*p;
intch;
intj=0;
printf("请输入要查找的数值:
\n");
scanf("%d",&ch);
p=head->next;
j=1;
while(p!
=NULL&&p->data!
=ch)
{
p=p->next;
j++;
}
if(p==NULL)
printf("你所输入的值不存在!
\n");
else
printf("第%d个元素为%d\n",j,p->data);
}
测试数据:
查找值为3的值
运行结果:
(3)己知单链表中的元素非递减有序排列,编写算法删除单链表中值相同的多余的元素。
测试要求:
在空链表、有1组相同元素、有2组连续相同元素、有2组以上不连续相同元素的情况下测试程序运行情况。
主函数内的代码:
linklist*deld(linklist*head)//删除连续相同元素
{
linklist*p,*q;
p=head->next;
printf("删除后链表为:
\n");
if(p==NULL)
returnhead;
else
{
while(p->next!
=NULL)
{
q=p->next;
if(p->data==q->data)
{
p->next=q->next;
free(q);
}
else
{
p=p->next;
q=q->next;
}
}
}
returnhead;
}
测试数据:
1245787896
10111125262828353648
5568910111212353865657889
运行结果:
(4)已知单链表中的数据元素递增有序,编写算法,给定的两个数据Min和Max,删除表中值在min与max之间的结点。
测试要求:
在空链表、max小于链表第1个元素值、min大于链表最后1个元素值、min与max在链表中间的情况下测试程序运行情况。
主函数内的代码:
linklist*del2(linklist*head)//删除链表中的min与max之间的元素
{
linklist*p,*q1,*q2=NULL;
intmax=0,min=0;
printf("请输入min和max\n");
scanf("%d%d",&min,&max);
printf("删除后链表为:
\n");
if(head->next==NULL)
returnhead;
if(head->next->data>max)
returnhead;
elsep=head;
while(p->next!
=NULL&&p->next->data<=min)
p=p->next;
if(p->next==NULL)
returnhead;
else
{
q1=p->next;q2=q1->next;
}
while(q2!
=NULL&&q2->data q2=q2->next; p->next=q2; while(q1! =q2) { p=q1;q1=q1->next; free(p); } returnhead; } 测试数据: 121518234578 min为15max为23 运行结果: 四、完整程序 #include #include typedefintdatatype;//定义数据元素的类型,命名为datatype typedefstructnode { datatypedata; structnode*next; }linklist;//定义结点类型,命名为linklist linklist*createlist() { intt; linklist*head,*s,*r;//s为新建结点,r为尾结点 head=(linklist*)malloc(sizeof(linklist));//开辟空间,建立一个头结点 r=head; printf("请输入数字序列,产生单链表,以-1结束。 \n"); scanf("%d",&t); while(t! =-1) { s=(linklist*)malloc(sizeof(linklist)); s->data=t; r->next=s; r=s; scanf("%d",&t); } r->next=NULL; returnhead; } voidprintnode(linklist*head)//输出程序 { linklist*r; r=head->next; if(r==NULL) { printf("输入为空\n"); } while(r! =NULL) { printf("%d\t",r->data); r=r->next; } printf("\n输出结束\n"); } voidfindi(linklist*head)//查找结点为i的值 { linklist*p,*q; inti=0,j=0; printf("输入要查找的结点: \n"); scanf("%d",&i); if(i==1) q=head->next; else { p=head->next; j=1; while(p! =NULL) { p=p->next; j++; if(i==j) { q=p; break; } } } if(p==NULL) { printf("超出范围,不存在"); } else { printf("查找的元素为: "); printf("%d\n",q->data); } } voidfindx(linklist*head)//查找值为x的结点 { linklist*p; intch; intj=0; printf("请输入要查找的数值: \n"); scanf("%d",&ch); p=head->next; j=1; while(p! =NULL&&p->data! =ch) { p=p->next; j++; } if(p==NULL) printf("你所输入的值不存在! \n"); else printf("第%d个元素为%d\n",j,p->data); } linklist*deld(linklist*head)//删除连续相同元素 { linklist*p,*q; p=head->next; printf("删除后链表为: \n"); if(p==NULL) returnhead; else { while(p->next! =NULL) { q=p->next; if(p->data==q->data) { p->next=q->next; free(q); } else { p=p->next; q=q->next; } } } returnhead; } linklist*del2(linklist*head)//删除链表中的min与max之间的元素 { linklist*p,*q1,*q2=NULL; intmax=0,min=0; printf("请输入min和max\n"); scanf("%d%d",&min,&max); printf("删除后链表为: \n"); if(head->next==NULL) returnhead; if(head->next->data>max) returnhead; elsep=head; while(p->next! =NULL&&p->next->data<=min) p=p->next; if(p->next==NULL) returnhead; else { q1=p->next;q2=q1->next; } while(q2! =NULL&&q2->data q2=q2->next; p->next=q2; while(q1! =q2) { p=q1;q1=q1->next; free(p); } returnhead; } voidmain() { } 五、结论 通过此次试验了解的链表的创建,运用了链表的删除和查找功能的实用。 也更加强和巩固了C语言中构造函数的运用。 六、评语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 基础 实验 报告
