数据结构实验报告实现单链表各种基本运算的算法.docx
- 文档编号:28513566
- 上传时间:2023-07-18
- 格式:DOCX
- 页数:12
- 大小:231.34KB
数据结构实验报告实现单链表各种基本运算的算法.docx
《数据结构实验报告实现单链表各种基本运算的算法.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告实现单链表各种基本运算的算法.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构实验报告实现单链表各种基本运算的算法
实验题目
实现单链表各种基本运算的算法
小组合作
无
姓名
班级
学号
一、实验目的
领会单链表存储结构和掌握单链表中各种基本运算算法设计
二.实验环境
MiscroftVisualC++6.0环境。
三.实验内容与步骤
1.编写linklist.cpp程序包含有关单链表运算算法
2.编写exp2-2.cpp程序包含有关程序代码
3.运行程序exp2-2.cpp,得到结果
四、实验过程与分析
//单链表运算算法
#include
#include
typedefcharElemType;
typedefstructLNodea
{
ElemTypedata;
structLNode*next;
//指向后继结点
}LinkNode;
//单链表结点类型
voidCreateListF(LinkNode*&L,ElemTypea[],intn)
//头插法建立单链表
{
LinkNode*s;
L=(LinkNode*)malloc(sizeof(LinkNode));
//创建头结点
L->next=NULL;
for(inti=0;i { s=(LinkNode*)malloc(sizeof(LinkNode)); //创建新结点s s->data=a[i]; s->next=L->next; //将结点s插在原开始结点之前,头结点之后 L->next=s; } } voidCreateListR(LinkNode*&L,ElemTypea[],intn) //尾插法建立单链表 { LinkNode*s,*r; L=(LinkNode*)malloc(sizeof(LinkNode)); //创建头结点 L->next=NULL; r=L; //r始终指向尾结点,开始时指向头结点 for(inti=0;i { s=(LinkNode*)malloc(sizeof(LinkNode)); //创建新结点s s->data=a[i]; r->next=s; //将结点s插入r结点之后 r=s; } r->next=NULL; //尾结点next域置为NULL } 实验截图 (1) voidInitList(LinkNode*&L) //初始化线性表 { L=(LinkNode*)malloc(sizeof(LinkNode)); //创建头结点 L->next=NULL; //单链表置为空表 } voidDestroyList(LinkNode*&L) //销毁线性表 { LinkNode*pre=L,*p=pre->next; while(p! =NULL) {free(pre); pre=p; //pre、p同步后移一个结点 p=pre->next; } free(pre); //此时p为NULL,pre指向尾结点,释放它 } boolListEmpty(LinkNode*L) //判线性表是否为空表 { return(L->next==NULL); } intListLength(LinkNode*L) //求线性表的长度 {inti=0; LinkNode*p=L; //p指向头结点,n置为0(即头结点的序号为0) while(p->next! =NULL) {i++; p=p->next; } return(i); //循环结束,p指向尾结点,其序号i为结点个数 } voidDispList(LinkNode*L) //输出线性表 {LinkNode*p=L->next;//p指向首结点 while(p! =NULL)//p不为NULL,输出p结点的data域 {printf("%c",p->data); p=p->next;//p移向下一个结点 } printf("\n"); } 实验截图 (2) boolGetElem(LinkNode*L,inti,ElemType&e) //求线性表中第i个元素值 {intj=0; if(i<=0)returnfalse; //i错误返回假 LinkNode*p=L; //p指向头结点,j置为0(即头结点的序号为0) while(j =NULL) //找第i个结点p {j++; p=p->next; } if(p==NULL) //不存在第i个数据结点,返回false returnfalse; else //存在第i个数据结点,返回true {e=p->data; returntrue; } } intLocateElem(LinkNode*L,ElemTypee) //查找第一个值域为e的元素序号 {inti=1; LinkNode*p=L->next; //p指向首结点,i置为1(即首结点的序号为1) while(p! =NULL&&p->data! =e) //查找data值为e的结点,其序号为i {p=p->next; i++; } if(p==NULL) //不存在值为e的结点,返回0 return(0); else //存在值为e的结点,返回其逻辑序号i return(i); } 实验截图(3) boolListInsert(LinkNode*&L,inti,ElemTypee) //插入第i个元素 {intj=0; if(i<=0)returnfalse; //i错误返回假 LinkNode*p=L,*s; //p指向头结点,j置为0(即头结点的序号为0) while(j =NULL) //查找第i-1个结点p {j++; p=p->next; } if(p==NULL) //未找到第i-1个结点,返回false returnfalse; else //找到第i-1个结点p,插入新结点并返回true {s=(LinkNode*)malloc(sizeof(LinkNode)); s->data=e; //创建新结点s,其data域置为e s->next=p->next; //将结点s插入到结点p之后 p->next=s; returntrue; } } boolListDelete(LinkNode*&L,inti,ElemType&e) //删除第i个元素 {intj=0; if(i<=0)returnfalse; //i错误返回假 LinkNode*p=L,*q; //p指向头结点,j置为0(即头结点的序号为0) while(j =NULL) //查找第i-1个结点 {j++; p=p->next; } if(p==NULL) //未找到第i-1个结点,返回false returnfalse; else //找到第i-1个结点p {q=p->next; //q指向第i个结点 if(q==NULL) //若不存在第i个结点,返回false returnfalse; e=q->data; p->next=q->next; //从单链表中删除q结点 free(q); //释放q结点 returntrue; //返回true表示成功删除第i个结点 } } 实验截图(4) 编写exp2-2.cpp程序包含有关代码 //文件名: exp2-2.cpp #include"linklist.cpp" intmain() { LinkNode*h; ElemTypee; printf("单链表的基本运算如下: \n"); printf(" (1)初始化单链表h\n"); InitList(h); printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n"); ListInsert(h,1,'a'); ListInsert(h,2,'b'); ListInsert(h,3,'c'); ListInsert(h,4,'d'); ListInsert(h,5,'e'); printf("(3)输出单链表h: "); DispList(h); printf("(4)单链表h长度: %d\n",ListLength(h)); printf("(5)单链表h为%s\n",(ListEmpty(h)? "空": "非空")); GetElem(h,3,e); printf("(6)单链表h的第3个元素: %c\n",e); printf("(7)元素a的位置: %d\n",LocateElem(h,'a')); printf("(8)在第4个元素位置上插入f元素\n"); ListInsert(h,4,'f'); printf("(9)输出单链表h: "); DispList(h); printf("(10)删除h的第3个元素\n"); ListDelete(h,3,e); printf("(11)输出单链表h: "); DispList(h); printf("(12)释放单链表h\n"); DestroyList(h); return1; } 实验截图(5) 运行得到结果 实验截图(6) 五.实验总结 通过这次实验,我的收获如下: 1.进行编程时,要在感到模糊的地方进行备注,方便在报错的时候进行修改。 2.要保持linklist.cpp程序中的函数名与exp2-2.cpp程序中的函数名完全一致,特别是大小写部分要特别注意。 3.领会到了单链表存储的大体结构 4.了解了在单链表中各种基本运算算法设计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 实现 单链表 各种 基本 运算 算法