计算机软件基础实验报告2.docx

上传人:b****7 文档编号:10778733 上传时间:2023-02-22 格式:DOCX 页数:16 大小:95.74KB
下载 相关 举报
计算机软件基础实验报告2.docx_第1页
第1页 / 共16页
计算机软件基础实验报告2.docx_第2页
第2页 / 共16页
计算机软件基础实验报告2.docx_第3页
第3页 / 共16页
计算机软件基础实验报告2.docx_第4页
第4页 / 共16页
计算机软件基础实验报告2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

计算机软件基础实验报告2.docx

《计算机软件基础实验报告2.docx》由会员分享,可在线阅读,更多相关《计算机软件基础实验报告2.docx(16页珍藏版)》请在冰豆网上搜索。

计算机软件基础实验报告2.docx

计算机软件基础实验报告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//printf和scanf提供头文件

#include//malloc和free提供头文件

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语言中构造函数的运用。

六、评语

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1