单链表.docx
《单链表.docx》由会员分享,可在线阅读,更多相关《单链表.docx(12页珍藏版)》请在冰豆网上搜索。
单链表
肇庆学院计算机学院
实验报告
专业:
电子商务班级:
11科技1班姓名:
黎庆强学号:
201124131147课程名称:
学年学期1□/2□课程类别专业必修□限选□任选□实践□
●实验时间:
2012年3月23日
●实验内容:
1.编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。
2.编写函数,实现遍历单链表。
3.编写函数,实现把单向链表中元素逆置(不允许申请新的结点空间)。
4.编写函数,建立一个非递减有序单链表。
5.编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。
6.编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。
7.编写函数,实现在非递减有序链表中删除值为x的结点。
8.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
●实验目的及要求:
●目的:
1.掌握单链表的存储结构形式及其描述。
2.掌握单链表的建立、查找、插入和删除操作。
要求:
1.插入、删除时元素的移动原因、方向及先后顺序。
2.理解不同的函数形参与实参的传递关系。
●实验内容、方法与步骤:
(使用附页填写并附在本页后)
●实验结果:
●小结:
通过这次的实验我学会了如何去运用单链表的建立、查找、插入和删除操作,理解了不同的函数形参与实参的传递关系。
分数:
批阅老师:
20年月日
第页/共页
肇庆学院计算机科学系
实验报告(附页)
实验内容、方法与步骤:
#include
typedefintdatatype;
typedefstructnode//结点类型的定义
{
datatypedata;
structnode*next;
}Lnode,*Linklist;
voidformer_Linklist(Linklist&L);//表头插入
voidlater_Linklist(Linklist&L);//表尾插入
voidprint_Linklist(Linklist&L);//输出数据
voidyouinsert_Linklist(LinklistL,inti);//有序插入
intlength_Linklist(LinklistL);//求表长
voidxuhao_Linklist(LinklistL,inti);//按序号查找
voidanjing_Linklist(LinklistL);//按值查找
voiddelete_Linklist(LinklistL);//删除数据
voidinsert_Linklist(LinklistL);
intx,a,i;
intmain()
intchoic=1;
LinklistL;
L=NULL;
do{
printf("********************************欢迎使用整型单链表******************************\n");
printf("\t\t【1】表头输入数据【2】表尾输入数据【3】按值查找数据\n\n");
printf("\t\t【4】位置查找数据【5】删除数据【6】求单链表的表长\n\n");
printf("\t\t【7】用有序表插入法建立一个新的单链表\n\n");
printf("\t\t【8】把元素x插入到有序单链表里,使其依然有序\n\n");
printf("\t\t【9】退出\n");
printf("*******************************************************************************\n");
printf("请选择你要进行的操作【1-9】:
");
scanf("%d",&choic);//读入一个数
while(choic<1||choic>9)
printf("******************************输入错误!
请重新选择******************************\n");
scanf("%d",&choic);//读入第二个数
}
switch(choic)
case1:
//表头输入数据
former_Linklist(L);
print_Linklist(L);
break;
case2:
//表尾输入数据
printf("请你输入要插入整型数据的个数:
scanf("%d",&a);
printf("请你输入%d个整型数据:
",a);
later_Linklist(L);
case3:
//按值查找数据
anjing_Linklist(L);
case4:
//位置查找数据
xuhao_Linklist(L,i);
case5:
printf("请你输入要删除的整型数据:
scanf("%d",&x);
delete_Linklist(L);//删除数据
case6:
intlength;
length=length_Linklist(L);
printf("此单链表的表长为:
%d",length);
printf("\n");
case7:
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
printf("请你输入要建立新单链表整型数据的个数:
for(i=0;i{scanf("%d",&x);insert_Linklist(L);}print_Linklist(L);break;}case8:{printf("请你输入要插入的整型数据:");scanf("%d",&x);insert_Linklist(L);print_Linklist(L);break;}}}while(choic!=9);return0;}//主函数结束 voidprint_Linklist(Linklist&L)//输出数据{Linklistp;p=L;while(p->next!=NULL){p=p->next;printf("%6d",p->data);}printf("\n");}voidformer_Linklist(Linklist&L)//表头插入{Linklistp,q;printf("请你输入要插入整型数据的个数:");scanf("%d",&a);printf("请你输入%d个整型数据:",a);L=(Linklist)malloc(sizeof(Lnode));L->next=NULL;p=L;for(i=0;i{scanf("%d",&x);q=(Linklist)malloc(sizeof(Lnode));q->data=x;q->next=p->next;p->next=q;}}voidlater_Linklist(Linklist&L)//表尾插入{Linklistp,q;L=(Linklist)malloc(sizeof(Lnode));L->next=NULL;p=L;for(i=0;i{scanf("%d",&x);q=(Linklist)malloc(sizeof(Lnode));q->data=x;q->next=NULL;p->next=q;p=q;}}voidanjing_Linklist(LinklistL)//按值查找{intj=0;printf("请输入你要查找的整型数据:");scanf("%d",&x);Lnode*p=L->next;while(p!=NULL&&p->data!=x){p=p->next;j++;}printf("你要查的整型数据%d的位置为:",x);printf("%6d",j+1);printf("\n");}voidxuhao_Linklist(LinklistL,inti)//按序号查找{intj=0;printf("请你输入要查的整型数据的位置:");scanf("%d",&i);Lnode*p=L;while(p->next!=NULL&&j{p=p->next;j++;}if(j==i)printf("你要查的位置%d的整型数据为:",i);printf("%6d",p->data);printf("\n");}voiddelete_Linklist(LinklistL)//删除数据{Lnode*p,*q;p=L;q=L->next;while(q&&q->data!=x){p=q;q=q->next;}if(!q)printf("没有你想要删除的整型数据!");else{p->next=q->next;free(q);}}voidinsert_Linklist(LinklistL)//有序插入{Lnode*p,*q;q=(Linklist)malloc(sizeof(Lnode));q->data=x;p=L;while(p->next&&p->next->data<=x)p=p->next;q->next=p->next;p->next=q;}intlength_Linklist(LinklistL)//求表长{Lnode*p=L;intj=0;while(p->next){p=p->next;j++;}returnj;} 程序运行如下: 分数:批阅老师:200年月日第页/共页
insert_Linklist(L);
case8:
printf("请你输入要插入的整型数据:
}while(choic!
=9);
return0;
}//主函数结束
voidprint_Linklist(Linklist&L)//输出数据
Linklistp;
p=L;
while(p->next!
=NULL)
p=p->next;
printf("%6d",p->data);
voidformer_Linklist(Linklist&L)//表头插入
Linklistp,q;
for(i=0;i{scanf("%d",&x);q=(Linklist)malloc(sizeof(Lnode));q->data=x;q->next=p->next;p->next=q;}}voidlater_Linklist(Linklist&L)//表尾插入{Linklistp,q;L=(Linklist)malloc(sizeof(Lnode));L->next=NULL;p=L;for(i=0;i{scanf("%d",&x);q=(Linklist)malloc(sizeof(Lnode));q->data=x;q->next=NULL;p->next=q;p=q;}}voidanjing_Linklist(LinklistL)//按值查找{intj=0;printf("请输入你要查找的整型数据:");scanf("%d",&x);Lnode*p=L->next;while(p!=NULL&&p->data!=x){p=p->next;j++;}printf("你要查的整型数据%d的位置为:",x);printf("%6d",j+1);printf("\n");}voidxuhao_Linklist(LinklistL,inti)//按序号查找{intj=0;printf("请你输入要查的整型数据的位置:");scanf("%d",&i);Lnode*p=L;while(p->next!=NULL&&j{p=p->next;j++;}if(j==i)printf("你要查的位置%d的整型数据为:",i);printf("%6d",p->data);printf("\n");}voiddelete_Linklist(LinklistL)//删除数据{Lnode*p,*q;p=L;q=L->next;while(q&&q->data!=x){p=q;q=q->next;}if(!q)printf("没有你想要删除的整型数据!");else{p->next=q->next;free(q);}}voidinsert_Linklist(LinklistL)//有序插入{Lnode*p,*q;q=(Linklist)malloc(sizeof(Lnode));q->data=x;p=L;while(p->next&&p->next->data<=x)p=p->next;q->next=p->next;p->next=q;}intlength_Linklist(LinklistL)//求表长{Lnode*p=L;intj=0;while(p->next){p=p->next;j++;}returnj;} 程序运行如下: 分数:批阅老师:200年月日第页/共页
q=(Linklist)malloc(sizeof(Lnode));
q->data=x;
q->next=p->next;
p->next=q;
voidlater_Linklist(Linklist&L)//表尾插入
for(i=0;i{scanf("%d",&x);q=(Linklist)malloc(sizeof(Lnode));q->data=x;q->next=NULL;p->next=q;p=q;}}voidanjing_Linklist(LinklistL)//按值查找{intj=0;printf("请输入你要查找的整型数据:");scanf("%d",&x);Lnode*p=L->next;while(p!=NULL&&p->data!=x){p=p->next;j++;}printf("你要查的整型数据%d的位置为:",x);printf("%6d",j+1);printf("\n");}voidxuhao_Linklist(LinklistL,inti)//按序号查找{intj=0;printf("请你输入要查的整型数据的位置:");scanf("%d",&i);Lnode*p=L;while(p->next!=NULL&&j{p=p->next;j++;}if(j==i)printf("你要查的位置%d的整型数据为:",i);printf("%6d",p->data);printf("\n");}voiddelete_Linklist(LinklistL)//删除数据{Lnode*p,*q;p=L;q=L->next;while(q&&q->data!=x){p=q;q=q->next;}if(!q)printf("没有你想要删除的整型数据!");else{p->next=q->next;free(q);}}voidinsert_Linklist(LinklistL)//有序插入{Lnode*p,*q;q=(Linklist)malloc(sizeof(Lnode));q->data=x;p=L;while(p->next&&p->next->data<=x)p=p->next;q->next=p->next;p->next=q;}intlength_Linklist(LinklistL)//求表长{Lnode*p=L;intj=0;while(p->next){p=p->next;j++;}returnj;} 程序运行如下: 分数:批阅老师:200年月日第页/共页
q->next=NULL;
p=q;
voidanjing_Linklist(LinklistL)//按值查找
intj=0;
printf("请输入你要查找的整型数据:
Lnode*p=L->next;
while(p!
=NULL&&p->data!
=x)
j++;
printf("你要查的整型数据%d的位置为:
",x);
printf("%6d",j+1);
voidxuhao_Linklist(LinklistL,inti)//按序号查找
printf("请你输入要查的整型数据的位置:
scanf("%d",&i);
Lnode*p=L;
=NULL&&j
if(j==i)
printf("你要查的位置%d的整型数据为:
",i);
voiddelete_Linklist(LinklistL)//删除数据
Lnode*p,*q;
q=L->next;
while(q&&q->data!
q=q->next;
if(!
q)
printf("没有你想要删除的整型数据!
else
p->next=q->next;
free(q);
voidinsert_Linklist(LinklistL)//有序插入
while(p->next&&p->next->data<=x)
intlength_Linklist(LinklistL)//求表长
while(p->next)
returnj;
程序运行如下:
200年月日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1