单链表的操作.docx
- 文档编号:3716348
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:14
- 大小:117.13KB
单链表的操作.docx
《单链表的操作.docx》由会员分享,可在线阅读,更多相关《单链表的操作.docx(14页珍藏版)》请在冰豆网上搜索。
单链表的操作
《数据结构》实验报告
实验室:
****
实验日期和时间:
****
班级:
****
学号:
****
姓名:
****
成绩及教师评语:
实验一:
单链表的操作
一.我的实验选题:
单链表的相关操作和实现
二.实验主要内容和目的:
实验主要内容:
略
实验目的:
1.编制一个演示单链表的创建、插入、删除、查找、逆序、删除重复结点等操作的程序
2.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义。
三.概要设计:
1)为了实现上述程序功能,需要定义单链表的抽象数据类型:
ADTLinkList{
数据对象:
D={ai|ai∈ElemSet,i=0,1,2,…,n,n≥0}
数据关系:
R={
基本操作:
*creat_L()
操作结果:
构造一个长度不确定的线性表L,依次输入元素,以输出-999为结束标志。
.
out_L(L)
初始条件:
有一个长度为n的含有具体元素线性表
操作结果:
输出一个长度为n的元素并输出各个对应位序上的元素
insert_L(L,i,e)
初始条件:
表L已存在
操作结果:
将元素e插入到表L的i位置
delete_L(L,i)
初始条件:
表L已存在
操作结果:
将表L中i位置的元素删除,元素值置入e中返回
locat_L(L,e)
初始条件:
表L依存在
操作结果:
表L中查找是否元素e,并指明位序i
nixu_L(L)
初始条件:
表L依存在
操作结果:
表L中元素逆序排列
deleterepeat_L(L)
初始条件:
表L依存在
操作结果:
表L中的重复元素删除
} ADTLinkList
2) 本程序包含8个函数:
a)主函数main()
b)建立线性表*creat_L()
c)输出线性表out_L()
d)插入元素函数insert_L()
e)删除元素函数delete_L()
f)查找元素函数locat_L()
g)逆序输出元素nixu_L()
h)删除重复结点deleterepeat_L()
3)各函数间关系如下:
四.运用的存储结构说明:
链式存储结构
typedefintElemType;
typedefstructLNode
{ElemTypedata;
structLNode*next;
}LNode;
五.主要算法及相关函数功能、参数说明:
1.switch(k)循环语句,随之k的选择而进行不同的操作
2.
a.主函数main()
b.建立线性表*creat_L()
参数LNode*h,*p,*s;ElemTypex;
c.输出线性表out_L()
参数LNode*p,LNode*L
d.插入元素函数insert_sq()
参数LNode*L,inti,ElemTypee;LNode*s,*p;intj;
e.删除元素函数delete_sq()
参数LNode*L,inti,LNode*p,*q;intj;ElemTypex;
f.查找元素函数locat_sq()
参数LNode*L,ElemTypee,LNode*p;intj=1;
g.逆序元素函数nixu_L()
参数LNode*L,LNode*p,*s;
h.deleterepeat_L()
参数LNode*L,LNode*p,*q;,LNode*r=p;
六.在设计和调试程序时我遇到的主要问题及其解决方案:
无
七.程序运行结果截图:
起始窗口:
建立
线性表:
删除重复结点:
插入:
删除:
查找:
逆序:
实验结论:
实验成功
八.我对本次实验的总结:
通过对该程序的调试和运行,使的对线性表的功能及其构成有了进一步的了解。
九.附录:
#include
#include
#include
typedefintElemType;
typedefstructLNode
{ElemTypedata;
structLNode*next;
}LNode;
LNode*L;
/*函数声明*/
LNode*creat_L();
voidout_L(LNode*L);
voidinsert_L(LNode*L,inti,ElemTypee);
ElemTypedelete_L(LNode*L,inti);
intlocat_L(LNode*L,ElemTypee);
voidnixu_L(LNode*L);
voiddeleterepeat_L(LNode*L);
/*主函数*/
voidmain()
{inti,k,loc;
ElemTypee,x;
charch;
do{printf("\n");
printf("\n1.建立单链表");
printf("\n2.插入元素");
printf("\n3.删除元素");
printf("\n4.查找元素");
printf("\n5.逆序输出元素");
printf("\n6.删除重复结点后的元素输出");
printf("\n0.结束运行程序");
printf("\n========================================");
printf("\n请输入您的选择(1,2,3,4,5,6,0)");
scanf("%d",&k);
switch(k)
{case1:
{L=creat_L();
out_L(L);
}break;
case2:
{printf("\n请输入插入位置:
");
scanf("%d",&i);
printf("\n请输入要插入的元素值:
");
scanf("%d",&e);
insert_L(L,i,e);
out_L(L);
}break;
case3:
{printf("\n请输入删除元素位置:
");
scanf("%d",&i);
x=delete_L(L,i);
out_L(L);
if(x!
=-1){
printf("\n删除的元素为:
%d\n",x);
printf("删除%d后的单链表为:
\n",x);
out_L(L);
}
elseprintf("要删除的元素不存在!
");
}break;
case4:
{printf("\n请输入要查找的元素值:
");
scanf("%d",&e);
loc=locat_L(L,e);
if(loc==-1)
printf("\n未找到指定元素!
");
elseprintf("\n已找到,元素位置是%d",loc);
}break;
case5:
{printf("\n逆序输出元素:
");
nixu_L(L);
out_L(L);
}break;
case6:
{printf("\n删除重复结点后的元素输出:
");
deleterepeat_L(L);
out_L(L);
}break;
}/*switch*/
printf("\n----------------------------");
}while(k>=1&&k<7);
printf("\n按回车键,返回...\n");
ch=getchar();
}/*main*/
/*建立线性链表*/
LNode*creat_L()
{LNode*h,*p,*s;ElemTypex;
h=(LNode*)malloc(sizeof(LNode));
h->next=NULL;
p=h;
printf("\n请输入第一个数据元素:
");
scanf("%d",&x);
while(x!
=-999)
{s=(LNode*)malloc(sizeof(LNode));
s->data=x;s->next=NULL;
p->next=s;p=s;
printf("\n请输入下一个数据:
(输入-999表示结束。
)");
scanf("%d",&x);
}
return(h);
}/*creat_L*/
/*输出单链表中的数据元素*/
voidout_L(LNode*L)
{LNode*p;
p=L->next;printf("\n\n");
while(p!
=NULL)
{printf("%5d",p->data);p=p->next;}
}/*out_L*/
/*在线性表的第i个位置插入元素e*/
voidinsert_L(LNode*L,inti,ElemTypee)
{LNode*s,*p;
intj;
p=L;/*找第i-1个结点*/
j=0;
while(p!
=NULL&&j<=i-1){p=p->next;j++;}
if(p==NULL||i<1)
printf("\n请输入位置错误!
");
else{s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
}/*insert_L*/
/*删除第i个元素,返回其值*/
ElemTypedelete_L(LNode*L,inti)
{LNode*p,*q;intj;ElemTypex;
p=L;j=0;
while(p->next!
=NULL&&j
if(!
p->next||i<1){printf("删除位置错误!
\n");
return(-1);
}
else{q=p->next;x=q->data;
p->next=q->next;free(q);
return(x);
}
}/*delete_L*/
/*查找值为e的元素,返回他的位置*/
intlocat_L(LNode*L,ElemTypee)
{LNode*p;intj=1;
p=L->next;
while(p!
=NULL&&p->data!
=e){p=p->next;j++;}
if(p!
=NULL)return(j);
elsereturn(-1);
}/*locat_L*/
/*逆序输出元素*/
voidnixu_L(LNode*L){
LNode*p,*s;
p=L->next;
L->next=NULL;
while(p)
{
s=p->next;
p->next=L->next;
L->next=p;
p=s;
};
}/*nixu_L*/
/*删除重复结点*/
voiddeleterepeat_L(LNode*L)
{
LNode*p,*q;
p=L;
while(p!
=NULL)
{
q=p->next;
LNode*r=p;
while(q!
=NULL)
{
if(p->data==q->data)
{
r->next=q->next;
deleteq;
q=r->next;
}
else
{
r=q;
q=q->next;
}
}
p=p->next;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 操作