实验二.docx
- 文档编号:24926905
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:12
- 大小:16.64KB
实验二.docx
《实验二.docx》由会员分享,可在线阅读,更多相关《实验二.docx(12页珍藏版)》请在冰豆网上搜索。
实验二
实验报告
系部
班级
学号
姓名
课程名称
数据结构
实验日期
实验名称
链表的基本操作
成绩
实验目的:
掌握线性表的基本操作:
插入、删除、查找在链式存储结构上的实现。
实验条件:
电脑一台VC++6.0
实验内容与算法思想:
内容:
建立以有序的单链表,并实现下列操作:
1.输出表中所有元素的值;
2.查找值为x的元素;
3.插入值为x的元素,保持有序;
4.删除第i个元素。
算法思想:
1.先初始化单链表,然后建立单链表。
2.建立输出函数,用于输出链表中各个元素的值
3.建立查找函数,用于查找链表中是否有这个元素
4.建立插入函数,用于在链表中有序地插入输入的一个元素
5.建立删除函数,用于在链表中删除指定的元素
6.建立主函数,在主函数中写一个菜单,根据用户选择不同的功能,调用不同的函数,从而实现不同的功能
运行结果:
结束输入请输入0:
23690
输出:
1
查找x:
2
插入x:
3
删除第i个元素:
4
退出:
5
1
2369
2
请输入要查找的元素:
3
此链表中含有此元素
输出------------->:
1
查找x------------>:
2
插入x------------>:
3
删除第i个元素---->:
4
退出------------->:
5
3
请输入要插入的元素:
3
插入已完成
输出------------->:
1
查找x------------>:
2
插入x------------>:
3
删除第i个元素---->:
4
退出------------->:
5
1
23369
输出------------->:
1
查找x------------>:
2
插入x------------>:
3
删除第i个元素---->:
4
退出------------->:
5
4
请输入你要删除的元素的序号:
4
元素已删除...
1
2339
输出------------->:
1
查找x------------>:
2
插入x------------>:
3
删除第i个元素---->:
4
退出------------->:
5
5
Pressanykeytocontinue
实验总结:
通过这次上机实验,虽然我编写出程序,但是没有成功的运行出来,但通过查找改错,我认识到了自己的很多不足,同时我也知道的学习语言程序要多学多问,同时还要多思考,通过问同学我成功实现了:
查找、删除、插入运算!
附:
源程序:
/*
1.输出表中所有元素的值;
2.查找值为x的元素;
3.插入值为x的元素,保持有序;
4.删除第i个元素。
*/
#include
#include
#include
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
typedefintElemType;
typedefstructNode/*结点类型定义*/
{
ElemTypedata;
structNode*next;
}Node,*LinkList;/*LinkList为结构体指针类型*/
/*对单链表进行初始化*/
voidinitlist(LinkList*l)//这里LinkList为指针类型*l也是一个指针
{
*l=(LinkList)malloc(sizeof(Node));/*申请结点空间*/
(*l)->next=NULL;/*置为空表*/
}
/*创建单链表*/
voidcreatfromhead(LinkListL)/*有头插法建立单链表*/
{
Node*s;
inta;
intflag=1;/*设置一个标志,初值为1,当输入0时,flag为-1,建表结束*/
printf("结束输入请输入-1:
\n");
while(flag)
{
scanf("%d",&a);
if(a!
=0)
{
s=(Node*)malloc(sizeof(Node));
s->data=a
s->next=L->next;
L->next=s;
}
elesflag=-1;
}
}
/*输出表中所有元素的值*/
voidoutput(LinkListL)
{
LinkListp;
p=l;
printf("-------------------\n");
while((p=p->next)!
=NULL)
{
printf("%d",p->data);
}
printf("\n");
}
/*查找值为x的元素*/
Node*search(LinkListL,ElemTypex)
{
Node*p;
p=l->next;
while(p!
=NULL)
{
if(p->data!
=x)
p=p->next;
else
break;
}
returnp;
}
/*插入值为x的元素,保持有序*/
voidinsList(LinkListL,ElemTypex)
{
Node*p,*q,*s;
p=l;
q=l;
s=(Node*)malloc(sizeof(Node));
s->data=x;
if(q->next==NULL)
{
q->next=s;
s->next=NULL;
return;
}
while((q=q->next)!
=NULL)
{
if(q->data>x)
{
s->next=p->next;
p->next=s;
return;
}
p=p->next;
}
if(q==NULL)
{
p->next=s;
s->next=NULL;
}
}
/*删除第i个元素*/
intdeleList(LinkListL,inti)
{
Node*p,*q;
intcount=0,k=2;
p=l;
q=l->next;
while(p->next!
=NULL){
count++;
p=p->next;
}
if(count==0)
{
printf("链表为空,无法执行删除操作\n");
returnERROR;
}
if(i<1||i>count){
printf("删除的位置不合法\n");
returnERROR;
}
p=l;
while(k<=i)
{
p=p->next;
q=q->next;
k++;
}
p->next=q->next;
free(q);
returnOK;
}
/*intMenu(inti)
{
LinkListL;
Node*p;
intflag=1;
while(flag)
{intx,y,z;
printf("输出------------->:
1\n");
printf("查找------------->:
2\n");
printf("插入x------------->:
3\n");
printf("查找删除第i个元素------->:
4\n");
printf("退出------------->:
5\n");
scanf("%d",&i);
switch(i)
{
case1:
output(L);break;
case2:
printf("请输入要查找的元素:
\n");
scanf("%d",&x);
p=search(L,x);
if(p!
=NULL)printf("此链表中含有此元素\n");
elseprintf("此链表中没有此元素\n");
break;
case3:
printf("请输入要插入的元素:
\n");
scanf("%d",&y);
insList(L,y);
printf("插入已完成\n");
break;
case4:
printf("请输入你要删除的元素的序号:
\n");
scanf("%d",&z);
deleList(L,z);
printf("元素已删除...\n");
break;
case5:
flag=-1;break;
default:
flag=0;
}
}*/
voidmain()
{
LinkListL;
Node*p;
inti;
initlist(&L);
creatfromhead(L);
scanf("%d",&i);
//Menu(i);
intflag=1;
while(flag)
{inti,x,y,z;
printf("输出------------->:
1\n");
printf("查找------------->x:
2\n");
printf("插入------------->x:
3\n");
printf("查找删除第i个元素------->:
4\n");
printf("退出------------->:
5\n");
scanf("%d",&i);
switch(i)
{
case1:
output(L);break;
case2:
printf("请输入要查找的元素:
\n");
scanf("%d",&x);
p=search(L,x);
if(p!
=NULL)printf("此链表中含有此元素\n");
elseprintf("此链表中没有此元素\n");
break;
case3:
printf("请输入要插入的元素:
\n");
scanf("%d",&y);
insList(L,y);
printf("插入已完成\n");
break;
case4:
printf("请输入你要删除的元素的序号:
\n");
scanf("%d",&z);
deleList(L,z);
printf("元素已删除.\n");
break;
case5:
flag=-1;break;
default:
flag=0;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)