ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:55.48KB ,
资源ID:10117734      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10117734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二 单链表基本操作的实现.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二 单链表基本操作的实现.docx

1、实验二 单链表基本操作的实现实验二 单链表基本操作的实现【实验课程名称】数据结构【实验项目名称】单链表基本操作的实现【实验目的】1 理解单链表的存储结构及基本操作的定义;2掌握单链表存储基本操作;3学会设计实验数据验证程序。【实验仪器及环境】计算机,window xp操作系统,VC+6.0【实验内容及步骤】1单链表顺序存储基本操作存储结构定义:typedef struct LNode /结点类型 ElemType data; struct LNode *next;*Link,*Position;typedef struct /链表类型Link head,tail;int len;LinkLis

2、t;实现的基本操作:#include#include#include#includeusing namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct LNode /结点类型 ElemType data; struct LNode *next;*Link,*Position;typedef struct /链表类型 Link

3、 head,tail; int len;LinkList;Position MakeNode_L(Link &p,ElemType e) /创建结点 p=(Link)malloc(sizeof(LNode); if(!p) return ERROR; p-data=e; p-next=NULL; return p;void FreeNode_L(Link &q) /释放结点 free(q);Status InitList_L(LinkList &L) /初始化L为一个带头结点的空链表,头尾指针指向头结点,表长赋 ElemType e; e=-1;/实际应用中此初始化语句需要修改 if(!Mak

4、eNode_L(L.head,e)return ERROR;/开辟头结点 L.tail=L.head;L.len=0; return OK;/InitList_LStatus DestroyList_L(LinkList &L)/销毁链表L Link p; while(p=L.head-next)/依次释放有序链表中第一个元素至最后一个元素所占用空间; L.head-next=p-next; free(p); free(L.head); L.head=NULL;L.tail=NULL;L.len=0; coutendlThe list has been destroyed!next; whil

5、e(p) q=p-next; free(p); p=q; L.tail=L.head; L.len=0; return OK;Status InsFirst_L(LinkList &L,Link s) /在首元素前插入一个结点 s-next=L.head-next; if(!L.head-next) L.tail=s; L.head-next=s; L.len+; return OK;Status DelFirst_L(LinkList &L,Link h,Link &q) /删除首结点 h=L.head; q=L.head-next; if(q) h-next=q-next; q-next=

6、NULL; if(!h-next) L.tail=h; L.len-; return OK; else return ERROR;Status Append_L(LinkList &L,Link s) /将两个链表跟一个字符串连接起来 Link q; if(!L.head-next) L.head-next=q=s; else L.tail-next=q=s; while(q-next) q=q-next; L.tail=q; return OK;Position Remove_L(LinkList &L,Link &q) /删除尾结点 Link p; p=L.head; if(!L.head

7、-next) coutThe LinkList is empty!next!=L.tail) p=p-next; q=L.tail; L.tail=p; L.tail-next=NULL; L.len-; return q;Status InsBefore_L(LinkList &L,Link &p,Link s) /在p指向的结点前插入一个结点 Link q; q=L.head; if(p=L.head) cout 不能在这个地方插入元素!next!=p) q=q-next; s-next=p; q-next=s; L.len+; return OK;Status InsAfter_L(Li

8、nkList &L,Link &p,Link s) /在p指向的结点后插入一个结点 if(p=L.tail) L.tail=s; s-next=p-next; p-next=s; L.len+; return OK;Status SetCurElem_L(Link &p,ElemType e) /改变p指向的结点的内容 p-data=e; return OK;ElemType GetCurElem_L(Link p) /获取p指向的结点的内容 return p-data;int ListLength_L(LinkList L) /获取单链表的长度值 return L.len;Status Li

9、stEmpty_L(LinkList L) /判断单链表是否为空,是返回,否返回 if(L.head=L.tail) return TRUE; else return FALSE;Position GetHead_L(LinkList L) /获取头指针的地址 return L.head;Position GetLast_L(LinkList L) /获取尾指针的地址 return L.tail;Position PriorPos_L(LinkList L,Link p) /获取p的前驱 Link q; q=L.head; if(p=L.head-next) return NULL; else

10、 while(q-next!=p) q=q-next; return q;Position NextPos_L(LinkList L,Link p) /获取p的后继 if(!p-next) return NULL; return p-next;Status LocatePos_L(LinkList L,int i,Link &p) /查找p在单链表中的位置i int j; if(inext; for(j=1;jnext; if(!p) return ERROR; return OK;Status compare(ElemType x,ElemType y) /比较函数 if(x=y) retu

11、rn 1; else return 0;Status LocateElem_L(LinkList L,ElemType e,Link &p) /返回跟e相同的值,没有的话返回空指针 int i=0; p=L.head; do i+; p=p-next; while(p&!compare(p-data,e); if(p) coutiendl; else coutIt is not in here!next; while(p-next) visit(p-data); p=p-next; return OK;Status ListInsert_L(LinkList &L,int i,ElemType

12、 e) /在第i个位置后插入一个元素 int j; Link p,s; s=(Link)malloc(sizeof(LNode); p=L.head-next; for(j=1;jnext; s-data=e; s-next=p-next; p-next=s; L.len+; return OK;Status ListDelete_L(LinkList &L,int i) /删除第i个元素的结点 if(iL.len) return ERROR; int j; Link p; p=L.head-next; for(j=1;jnext; p-next=p-next-next; L.len-; re

13、turn OK;Status MergeList_L(LinkList La,LinkList Lb,LinkList &Lc) /将两个字符串连接起来 Link p,q,t; p=La.head-next; q=Lb.head-next; while(p&q) if(p-datadata) MakeNode_L(t,p-data); InsFirst_L(Lc,t); p=p-next; else MakeNode_L(t,q-data); InsFirst_L(Lc,t); q=q-next; while(p) MakeNode_L(t,p-data); InsFirst_L(Lc,t);

14、 p=p-next; while(q) MakeNode_L(t,q-data); InsFirst_L(Lc,t); q=q-next; return OK;【测试数据及实验结果】int main() LinkList la,lb,lc; Link p,q,s,k,t; InitList_L(la); InitList_L(lb); InitList_L(lc); cout建立一个有个数据的顺序表La,各节点值依次为:,4,6,8,10,12,.,38,40endl; cout-=1;i-) MakeNode_L(p,2*i); InsFirst_L(la,p); q=la.head-nex

15、t; while(q) coutsetw(3)data; q=q-next; coutendl; coutendl删除,节点endl; cout-next; while(q) coutsetw(3)data; q=q-next; coutendl; cout-endl; cout表长为:la.lenendl; cout-endl; cout 在第五个结点后插入一个结点endl; cout-next; while(q) coutsetw(3)data; q=q-next; coutendl; cout-endl; cout分别查找值为,45的元素endl; cout-endl; LocateEl

16、em_L(la,28,s); LocateElem_L(la,45,s); cout-endl; cout建立线性表Lb,各结点值依次为:endl; cout3,8,13,18,23,28,33,38,43,48,53,58,63,68,73,78endl; cout-=0;i-) MakeNode_L(p,i*10+8); InsFirst_L(lb,p); MakeNode_L(p,i*10+3); InsFirst_L(lb,p); q=lb.head-next; while(q) coutsetw(3)data; q=q-next; coutendl; cout-endl; cout将

17、La和Lb合并为线性表Lcendl; cout-next; cout-endl; cout输出La,Lb,Lc的以及各表的表长endl; cout-endl; while(q) coutsetw(3)data; q=q-next; coutnext; while(q) coutsetw(3)data; q=q-next; coutendl;q=lc.tail;while(q)coutsetw(3)data;q=PriorPos_L(lc,q);coutendl; cout-endl; cout清空线性表La,Lb;输出La,Lb的表长endl; cout-endl; coutla.lenend

18、llb.lenendllc.lenendl; ClearList_L(la); coutla.lenendl; ClearList_L(lb); coutlb.lenendl; return 0;【实验小结】举例说明求解什么样的问题用顺序存储,什么样的问题用链式存储较好?答:使用顺序存储结构的情况: (1)空间利用率较高; (2)存取某个元素速度快; (3)插入元素和删除元素存在元素移动,速度慢,耗时; (4)有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现溢出问题.当元素个数远少于预先分配的空间时,空间浪费巨大。在存取元素频繁,但删除或插入操作较少的情况宜用顺序表。例如建立一个班学生的资料,一般学生人数变动较少,而对资料的调用较多,股宜用顺序表。使用链式存储结构的情况: (1)占用额外的空间以存储指针(浪费空间); (2)存取某个元素速度慢; (3)插入元素和删除元素速度快; (4)没有空间限制,存储元素的个数无上限,基本只与内存空间大小有关。【源代码说明】1文件名:.cpp2操作说明:只需使用visual c+6.0软件将其打开,点击运行即可!

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

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