1单链表.docx
《1单链表.docx》由会员分享,可在线阅读,更多相关《1单链表.docx(8页珍藏版)》请在冰豆网上搜索。
1单链表
《单链表的基本操作》实验报告
一、实验目的和要求
1、链表的显示要作为函数被调用
2、把自己使用的单链表结构明确的表达出来
3、基本上实现每个实验题目的要求
二、实验内容和原理
1、由键盘输入的方式给出一组整数,把这些整数存到一个首地址为AH的单链表中
2、把链表中的元素按照降序排列
3、把链表中的数据按照先后顺序显示(要求在显示器可见)
4、插入一个新的整数,使得链表插入后仍然为有序排列。
三、软、硬件环境
硬件:
Pentium(R)Dual-coreCPUE5300@2.60Hz
1.99GB
软件:
windowsXP
C++程序设计与试验系统
四、实验步骤
1、建立单链表
2、完成排序函数
3、完成插入函数
4、完成删除函数
5、完成输出函数
6、执行函数
#include
usingnamespacestd;
#defineNULL0
structAH
{
intdata;
structAH*next;
};
//*******************************创建链表***************************
AH*creat(intn)
{
AH*head,*p1,*p2;
inti;
for(i=1;i<=n;i++)
{
p1=newAH;
if(i==1)
head=p1;
else
p2->next=p1;
p2=p1;
cin>>p1->data;
}
p1->next=NULL;
p2=p1=NULL;
cout<returnhead;
}
//****************************排序**********************************
voidorder(structAH*head,intn)
{
structAH*p,*q;
intt;
p=q=head;
for(q=head;q->next!
=NULL;q=q->next)
{
p=q->next;
while(p->next!
=NULL)
{
if(p->data>=q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
p=p->next;
}
if(p->data>=q->data)//这完了后,还有一个没有比较呢,再加个if
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
//****************************插入函数***************************
voidinsert(structAH*head,inta)
{
structAH*p,*q,*r;
q=head;
r=newAH;
r->data=a;
p=q->next;
while(p->next!
=NULL&&r->datadata)
{
q=q->next;
p=p->next;
}
if(p->next==NULL)
{
r->next=p->next;
p->next=r;
}
else
{
r->next=q->next;
q->next=r;
}
cout<}
//*********************************删除函数*******************************
intdel(structAH*head,inta)
{
AH*p1,*p2;
intg=1;
p1=p2=head;
while(p1->data!
=a&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
}
cout<if(p1->data!
=a)
g=0;
elseif(p1==head)
{
head=head->next;
p1->next=NULL;
}
elseif(p1->next==NULL)
{
p2->next=p1->next;
}
else
{
p2->next=p1->next;
p1->next=NULL;
}
deletep1;
returng;
}
//********************************输出函数**************************************
voidprint(structAH*head)
{
structAH*p;
p=head;
inti;
for(i=0;p->next!
=NULL;i++)
{
cout<data<<"";
p=p->next;
}
cout<data;
cout<}
//**************************************************************************
voidmain()
{
structAH*head;
intn;
cout<<"创建单链表AH存储n个数据:
";
cin>>n;
cout<cout<<"这n个整数分别是:
";
head=creat(n);
cout<<"按从大到小的顺序输出存储的n个数据:
";
order(head,n);
print(head);
cout<inta;
cout<<"输入你要插入的数据值";
cin>>a;
insert(head,a);
cout<<"排序后的数组为:
";
n=n+1;
order(head,n);
print(head);
cout<intb;
cout<<"输入你要删除的数据:
";
cin>>b;
del(head,b);
n=n-1;
//order(head,n);
cout<<"删除后的数据:
";
print(head);
cout<}
五、实验结果及分析
显示结果如图所示。
通过反复校验本小组成员发现改程序有两处不完整的地方
1.“创建单链表AH存储n个数据”的个数必须是大于1个的。
“输入要删除的数据”的必须是前面输入的某个数,如果该数据前面没出现,则执行不能完全完成。
因为主函数中有此句:
n=n-1;order(head,n);,要删除的数如果不存在则n就没能减1,排序出错。
由于学期末时间紧,未能完善,小组成员之后将再将其完善。
六、实验总结
通过本次编程,学会了单链表的实现方法和有关的数据类型定义。
在实现链表的基本操作的过程中,复习和巩固了C++语言中的基本语句的使用方法,程序的规范写法,尤其是定义插入、排序等函数时if···else···判断语句的嵌套和for语句的双重循环控制等理解的更加深入。
相信在以后的编程时应用这些判断和控制语句会更加得心应手。
总之实验过程中不仅认识,掌握了新知识还巩固了基础,使自己的编程能力有了一定的提高。
编程能力更大的提升还需要大量的编写和反复的练习重复,下去之后自己再努力练习。
七、教师评语和成绩
教师签名:
年月日