数据结构单链表插入删除和修改实验报告.docx

上传人:b****4 文档编号:11950508 上传时间:2023-04-16 格式:DOCX 页数:12 大小:206.61KB
下载 相关 举报
数据结构单链表插入删除和修改实验报告.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

数据结构单链表插入删除和修改实验报告

 

计算机学院

实验报告

课程名称:

数据结构

实验名称:

单链表

 

学生姓名:

朱孝彬

学生学号:

20110511001

实验日期:

2012

 

一、实验目的

1.理解数据结构中带头结点单链表的定义和逻辑图表示方法。

2.掌握单链表中结点结构的C++描述。

3.熟练掌握单链表的插入、删除和查询算法的设计与C++实现。

二、实验内容

1.编制一个演示单链表插入、删除、查找等操作的程序。

三、实验步骤

1.需求分析

本演示程序用C++6.0编写,完成单链表的生成,任意位置的插入、删除,以及确定某一元素在单链表中的位置。

①输入的形式和输入值的范围:

插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;查找操作时需要输入元素的值。

在所有输入中,元素的值都是整数。

②输出的形式:

在所有三种操作中都显示操作是否正确以及操作后单链表的内容。

其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。

  ③程序所能达到的功能:

完成单链表的生成(通过插入操作)、插入、删除、查找操作。

④测试数据:

 A.插入操作中依次输入11,12,13,14,15,16,生成一个单链表

   B.查找操作中依次输入12,15,22返回这3个元素在单链表中的位置

   C.删除操作中依次输入2,5,删除位于2和5的元素

2.概要设计

1)为了实现上述程序功能,需要定义单链表的抽象数据类型:

  

(1)insert

初始化状态:

单链表可以不为空集;操作结果:

插入一个空的单链表L。

 

(2)decelt

    操作结果:

删除已有的单链表的某些结点。

(3)display

    操作结果:

将上述输入的元素进行排列显示。

   (4)modify

    操作结果:

将上述输入的某些元素进行修改。

   (5)save

   操作结果:

对上述所有元素进行保存。

   (6)load

    操作结果:

对上述元素进行重新装载。

3.使用说明

程序执行后显示

  ======================

1.单链表的创建

2.单链表的显示

3.单链表的长度

4.取第i个位置的元素

5.修改第i个位置的元素

6.插入元素到单链表里

7.删除单链表里的元素

8.合并两个单链表

9.退出系统

=======================

5.源代码:

#include

usingnamespacestd;

#definetrue1

#definefalse0

#defineok1

#defineerror0

#defineoverflow-2

typedefintStatus;

typedefintElemType;

typedefstructLNode

{ElemTypedata;

structLNode*next;

}LNode,*LinkList;

voidCreateList(LinkList&L,intn)

{LinkListp;

L=newLNode;

L->next=NULL;

LinkListq=L;

for(inti=1;i<=n;i++)

{p=newLNode;

cin>>p->data;

p->next=NULL;

q->next=p;

q=p;}

}

StatusGetElem(LinkListL,inti,ElemType&e)

{LinkListp=L->next;

intj=1;

while(p&&j

{p=p->next;

++j;}

if(!

p||j>i)returnerror;

e=p->data;

returnok;

}

StatusLinkInsert(LinkList&L,inti,ElemTypee)

{LinkListp=L;

intj=0;

while(p&&j

{p=p->next;

++j;}

if(!

p||j>i-1)

returnerror;

LinkLists=newLNode;

s->data=e;

s->next=p->next;

p->next=s;

returnok;

}

StatusListDelete(LinkList&L,inti,ElemType&e)

{LinkListp=L;

LinkListq;

intj=0;

while(p->next&&j

{

p=p->next;

++j;}

if(!

(p->next)||j>i-1)returnerror;

q=p->next;

p->next=q->next;

e=q->data;

delete(q);

returnok;

}

voidMergeList(LinkList&La,LinkList&Lb,LinkList&Lc)

{

LinkListpa,pc,pb;

pa=La->next;

pb=Lb->next;

Lc=pc=La;

while(pa&&pb)

{if(pa->data<=pb->data)

{pc->next=pa;

pc=pa;

pa=pa->next;}

else

{pc->next=pb;

pc=pb;

pb=pb->next;}

}

pc->next=pa?

pa:

pb;

delete(Lb);

}

voidshow(LinkListL)

{LinkListp;

p=L->next;

while(p)

{cout<data<<"-->";

p=p->next;}

cout<

}

intLength(LinkListL,inti)

{i=0;

LinkListp=L->next;

while(p)

{++i;

p=p->next;}

returni;

}

voidxiugai(LinkListL)

{inti,j=1;

ElemTypek;

ElemTypee,m;

LinkListp=L->next;

cout<<"请输入要修改的元素位置(0

";

cin>>i;

GetElem(L,i,e);

cout<<"该位置的元素:

"<

cout<<"修改后的元素值:

";

cin>>k;

while(p&&j

{p=p->next;

++j;}

m=p->data;

p->data=k;

cout<<"修改后的单链表显示如下:

"<

show(L);

}

voidhebing()

{inta,b;

LinkListLa,Lb,Lc;

cout<<"请输入第一个有序链表的长度:

"<

cin>>a;

cout<<"请输入第一个有序链表的元素共("<

"<

CreateList(La,a);

show(La);

cout<<"请输入第二个有序链表的长度:

"<

cin>>b;

cout<<"请输入第二个有序链表的元素共("<

"<

CreateList(Lb,b);

show(Lb);

MergeList(La,Lb,Lc);

cout<<"合并后的有序链表如下:

"<

show(Lc);

}

intmain()

{intselect;

intx;

ElemTypey;

LinkListlist;

for(;;)

{cout<<"单链表的基本操作"<

cout<<"1.单链表的创建"<

cout<<"2.单链表的显示"<

cout<<"3.单链表的长度"<

cout<<"4.取第i个位置的元素"<

cout<<"5.修改第i个位置的元素"<

cout<<"6.插入元素到单链表里"<

cout<<"7.删除单链表里的元素"<

cout<<"8.合并两个单链表"<

cout<<"9.退出系统"<

cout<<"请选择:

";

cin>>select;

switch(select)

{case1:

cout<<"请输入单链表的长度:

"<

cin>>x;

cout<<"请输入"<

CreateList(list,x);

break;

case2:

cout<<"单链表显示如下:

"<

show(list);

break;

case3:

ints;

cout<<"单链表的长度为:

"<

break;

case4:

cout<<"请选择所要取出元素的位置:

";

cin>>x;

while(x<0||x>Length(list,s))

{cout<<"输入有误,请重新输入"<

cout<<"请选择所要取出元素的位置:

";

cin>>x;}

GetElem(list,x,y);

cout<<"该位置的元素为:

"<

break;

case5:

xiugai(list);break;

case6:

cout<<"请选择要插入的位置:

";cin>>x;

while(x<0||x>Length(list,s))

{cout<<"输入有误,请重新输入"<

cout<<"请选择所要插入元素的位置:

";

cin>>x;}

cout<<"要插入的元素值:

";

cin>>y;

LinkInsert(list,x,y);

cout<<"插入后单链表显示如下:

"<

show(list);

break;

case7:

cout<<"请选择要删除的位置:

";cin>>x;

while(x<0||x>Length(list,s))

{cout<<"输入有误,请重新输入"<

cout<<"请选择所要删除元素的位置:

";

cin>>x;}

ListDelete(list,x,y);

cout<<"要删除的元素值:

"<

cout<<"删除后的单链表显示如下:

"<

show(list);

break;

case8:

hebing();

break;

case9:

exit(0);

break;

default:

cout<<"输入有误,请重新输入"<

break;

}

}

}

  

6.测试结果

  四、实验总结(结果分析和体会)

单链表的最后一个元素的next为null,所以,一旦遍历到末尾结点就不能再重新开始;而循环链表的最后一个元素的next为第一个元素地址,可返回头结点进行重新遍历和查找。

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

当前位置:首页 > 经管营销 > 经济市场

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

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