实验二.docx

上传人:b****4 文档编号:24926905 上传时间:2023-06-02 格式:DOCX 页数:12 大小:16.64KB
下载 相关 举报
实验二.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

实验二

实验报告

系部

班级

学号

姓名

课程名称

数据结构

实验日期

实验名称

链表的基本操作

成绩

实验目的:

掌握线性表的基本操作:

插入、删除、查找在链式存储结构上的实现。

 

实验条件:

电脑一台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;

}

}

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

当前位置:首页 > 初中教育 > 语文

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

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