单链表.docx

上传人:b****6 文档编号:7496486 上传时间:2023-01-24 格式:DOCX 页数:12 大小:188.66KB
下载 相关 举报
单链表.docx_第1页
第1页 / 共12页
单链表.docx_第2页
第2页 / 共12页
单链表.docx_第3页
第3页 / 共12页
单链表.docx_第4页
第4页 / 共12页
单链表.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单链表.docx

《单链表.docx》由会员分享,可在线阅读,更多相关《单链表.docx(12页珍藏版)》请在冰豆网上搜索。

单链表.docx

单链表

单链表

肇庆学院计算机学院

实验报告

专业:

电子商务班级:

11科技1班姓名:

黎庆强学号:

201124131147课程名称:

单链表

学年学期1□/2□课程类别专业必修□限选□任选□实践□

●实验时间:

2012年3月23日

●实验内容:

1.编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。

2.编写函数,实现遍历单链表。

3.编写函数,实现把单向链表中元素逆置(不允许申请新的结点空间)。

4.编写函数,建立一个非递减有序单链表。

5.编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。

6.编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。

7.编写函数,实现在非递减有序链表中删除值为x的结点。

8.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。

●实验目的及要求:

●目的:

1.掌握单链表的存储结构形式及其描述。

2.掌握单链表的建立、查找、插入和删除操作。

要求:

1.插入、删除时元素的移动原因、方向及先后顺序。

2.理解不同的函数形参与实参的传递关系。

●实验内容、方法与步骤:

(使用附页填写并附在本页后)

●实验结果:

(使用附页填写并附在本页后)

●小结:

通过这次的实验我学会了如何去运用单链表的建立、查找、插入和删除操作,理解了不同的函数形参与实参的传递关系。

 

分数:

批阅老师:

20年月日

第页/共页

肇庆学院计算机科学系

实验报告(附页)

实验内容、方法与步骤:

#include

#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);

print_Linklist(L);

break;

}

case3:

//按值查找数据

{

anjing_Linklist(L);

break;

}

case4:

//位置查找数据

{

xuhao_Linklist(L,i);

break;

}

case5:

{

printf("请你输入要删除的整型数据:

");

scanf("%d",&x);

delete_Linklist(L);//删除数据

print_Linklist(L);

break;

}

case6:

{

intlength;

length=length_Linklist(L);

printf("此单链表的表长为:

%d",length);

printf("\n");

break;

}

case7:

{

L=(Linklist)malloc(sizeof(Lnode));

L->next=NULL;

printf("请你输入要建立新单链表整型数据的个数:

");

scanf("%d",&a);

printf("请你输入%d个整型数据:

",a);

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年月日

第页/共页

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

当前位置:首页 > 求职职场 > 简历

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

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