1单链表.docx
- 文档编号:8561816
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:8
- 大小:39.39KB
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->data { 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< p=p->next; } cout< 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语句的双重循环控制等理解的更加深入。 相信在以后的编程时应用这些判断和控制语句会更加得心应手。 总之实验过程中不仅认识,掌握了新知识还巩固了基础,使自己的编程能力有了一定的提高。 编程能力更大的提升还需要大量的编写和反复的练习重复,下去之后自己再努力练习。 七、教师评语和成绩 教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表
![提示](https://static.bdocx.com/images/bang_tan.gif)