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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构邹永林版实验报告2顺序表和链表.docx

1、数据结构邹永林版实验报告2顺序表和链表实验二 顺序表与链表【实验目的】1、掌握线性表中元素的前驱、后续的概念。2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。3、对线性表相应算法的时间复杂度进行分析。4、理解顺序表、链表数据结构的特点(优缺点)。【实验学时】2学时【实验预习】回答以下问题:1、顺序表的存储表示在顺序表中,任一数据元素的存放位置是从起始位置开始、与该数据元素的位序成正比的对应存储位置,借助LOC(ai)=LOC(a1)+(i-1)*1确定,则顺序表是一种随机存取的存储结构。2、单链表的存储表示线性链表也称单链表,在每一个结点中只包含一个指针,用于指示该结点的直接后继结

2、点,整个链表通过指针相连,最后一个结点因为没有后继结点,其指针置为空(NULL)。这样,链表中所有数据元素(结点)构成一对一的逻辑关系,实现线性表的链式存储。【实验内容和要求】1、按照要求完成程序exp2_1.c,实现顺序表的相关操作。以下函数均具有返回值,若操作完成,返回OK,操作失败返回ERROR。函数需返回的其他数据,使用函数参数返回。exp2_1.c部分代码如下:#include#include#include#define ERROR 0#define MAXSIZE 100#define OK 1typedef int ElemType; /*定义表元素的类型*/typedef s

3、truct slist ElemType *list; int listsize; int length;Sqlist;Sqlist *L;/*(1)-补充顺序表的存储分配表示,采用定长和可变长度存储均可*/*函数声明*/int InitList_sq(Sqlist *L);int CreateList_sq(Sqlist *L);int ListInsert_sq(Sqlist *L,int i,ElemType e);int PrintList_sq(Sqlist *L);int ListDelete_sq(Sqlist *L,int i,ElemType *e);int ListLoca

4、te(Sqlist *L,ElemType e,int *pos);int menu_select();/*(2)-顺序表的初始化*/int InitList_sq(Sqlist *L) L-list=(ElemType *)malloc(MAXSIZE*sizeof(ElemType); if(L-list=NULL) return ERROR; else L-length=0; L-listsize=MAXSIZE; return 0;/*InitList*/*(3)-创建具有n个元素的顺序表*/int CreateList_sq(Sqlist *L) int a,b,c; printf(

5、请输入输入数据的个数n:); scanf(%d,&a); printf(请输入输入的数据:); for(b=0;blistb=c; L-length=L-length+a; return 0;/*CreateList*/*(4)-输出顺序表中的元素*/int PrintList_sq(Sqlist *L) int a; printf(输出数据:); for(a=0;alength;a+) printf(%d ,L-lista); return 0;/*PrintList*/*(5)-在顺序表的第i个位置之前插入新元素e*/int ListInsert_sq(Sqlist *L,int i,El

6、emType e) int a=L-length-1; for(;a=i-1;a-) L-lista+1=L-lista; L-listi-1=e; L-length+=1; return OK;/*ListInsert*/*(6)-在顺序表中删除第i个元素,e返回删除的元素*/int ListDelete_sq(Sqlist *L,int i,ElemType *e) int a=i-1; *e=L-listi-1; for(;alength;a+) L-lista=L-lista+1; L-length-=1; return OK;/* ListDelete_sq */*(7)-在顺序表中

7、查找指定值元素,pos为返回其位置序号*/int ListLocate(Sqlist *L,ElemType e,int *pos) int a,b=0; for(a=0;alength;a+) if(e=L-lista) b=0; *pos=a+1; break; else b=1; if(b=1) return 0; else return OK;/* ListLocate */*定义菜单字符串数组*/int menu_select() char *menu=n*MENU*n, 1. Create Listn, /*创建顺序表*/ 2. Get Elementn, /*查找顺序表中的元素*

8、/ 3. Insert datan, /*插入数据*/ 4. Delete datan, /*删除数据*/ 0. Quitn, /*退出*/ n*MENU*n ; char s3; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ for (i=0;i7;i+) /*输出主菜单数组*/ printf(%s,menui); do printf(nEnter you choice(04):); /*在菜单窗口外显示提示信息*/ scanf(%s,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整形数*/ while (c4); /*选择项不在04之间重

9、输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/*主函数*/int main() int m,k; int pos;int deldata;Sqlist sl; InitList_sq(&sl); for (;) /*无限循环*/ switch (menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ case 1: printf(n1-Create Sqlist:n); CreateList_sq(&sl); printf(nPrint Sqlist:n); PrintList_sq(&sl); break; case 2: printf(

10、n3-GetElem from Sqlist:n); printf(please input search data:); scanf(%d,&k); if (!ListLocate(&sl,k,&pos) printf(Not found); else printf(found the element, position is %dn,pos); printf(nPrint Sqlist:n); PrintList_sq(&sl); break; case 3: printf(n4-Insert from Sqlist:n); printf(n input insert location a

11、nd data:(location,data)n); scanf(%d,%d,&m,&k); if (ListInsert_sq(&sl,m,k) printf(nOKn); printf(nPrint Sqlist:n); PrintList_sq(&sl); else printf(nERROR!); break; case 4: printf(n5-Delete from Sqlist:n); printf(nplease input delete locationn); scanf(%d,&k); if (ListDelete_sq(&sl,k,&deldata) printf(nOK

12、n); printf(nDelete data is %dn,deldata); printf(nPrintSqlist:n); PrintList_sq(&sl); else printf(nERROR!); break; case 0: exit(0); /*如菜单返回值为0程序结束*/ return 0;(1)创建一个顺序表(2)查找元素位置(3)插入元素(4)删除元素2、按照要求完成程序exp2_2.c,实现单链表的相关操作。exp2_2.c部分代码如下:#include#include#include#define ERROR 0#define OK 1typedef int Ele

13、mType; /*定义表元素的类型*/*(1)-线性表的单链表存储表示*/typedef struct LNode ElemType date; struct LNode *next;LNode,*LinkList;LNode *InitList(); /*带头结点单链表初始化*/void PrintList(LinkList L); /*输出带头结点单链表的所有元素*/int GetElem(LinkList L,int i,ElemType *e); /*查找第i位置的元素,并由e返回其值*/int InsertElem(LinkList L,int i,ElemType e);/*在第i

14、个位置插入元素e*/int DeleteElem(LinkList L,int i,ElemType *e);/*删除第i位置的元素,并由e返回其值*/void DestroyLinkList(LinkList L);/*释放链表及其空间*/LinkList CreateList(int n); /*创建n个结点的单链表*/int menu_select(); /*菜单函数*/*带头结点单链表初始化*/LNode *InitList()LinkList L; L=(LNode *)malloc(sizeof(LNode); /*申请一个头结点*/ if (!L) return ERROR; /

15、*申请失败*/ L-next=NULL; /*头结点的指针域置空*/ return L;/*(1)-输出带头结点单链表的所有元素*/void PrintList(LinkList L) LNode *p=L-next; int i=0; while(p) i+; printf(n第%d个元素%d,i,p-date); p=p-next; /*PrintList*/*(2)-在单链表的第i个位置插入元素e,若插入成功返回OK,插入失败返回ERROR*/int InsertElem(LinkList L,int i,ElemType e) LNode *p=L,*s; int j=0; while

16、(p&jnext; j+; if(!p|ji-1) return ERROR; s=(LNode *)malloc(sizeof(LNode); if(!s)return ERROR; s-date=e; s-next=p-next; p-next=s; return OK;/* InsertElem */*(3)-查找第i位置的元素,若存在返回OK并由e返回其值,若不存在返回ERROR*/int GetElem(LinkList L,int i,ElemType *e) LNode *p; int j=1; p=L-next; while(p&jnext; j+; if(!p|ji) ret

17、urn ERROR; *e=p-date; return OK;/*GetElem*/*(4)-删除第i位置的元素,成功返回OK,并由e返回其值,若不成功返回ERROR,注意删除的结点必须释放其所占空间*/int DeleteElem(LinkList L,int i,ElemType *e) LNode *p=L,*s; int j=0; while(p&jnext; j+; if(!p|ji-1) return ERROR; s=p-next; p-next=s-next; *e=s-date; free(s); return OK;/* DeleteElem */*(5)-创建具有n个结

18、点的单链表,创建成功返回其头指针*/LinkList CreateList(int n) int i=1;LNode *p,*q,*L; L=InitList(); p=L; while(idate); q-next=NULL; p-next=q; p=q; return L;/*CreateList*/*释放链表及其空间*/void DestroyLinkList(LinkList L) LNode *p=L,*q; while(p) q=p-next; free(p); p=q; /* DestroyLinkList */int menu_select() char *menu=n*MEN

19、U*n, 1. Init LinkListn, /*初始化链表*/ 2. Get Elementn, /*查找元素*/ 3. Insert datan, /*插入元素*/ 4. Delete datan, /*删除元素*/ 5. CreateLinkListn, /*创建具有n个元素的链表*/ 0. Destroy LinkList&Quitn, /*释放链表所占空间&退出*/ n*MENU*n ; char s3; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ for (i=0;i8;i+) /*输出主菜单数组*/ printf(%s,menui); do print

20、f(nEnter you choice(05):); /*在菜单窗口外显示提示信息*/ scanf(%s,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整形数*/ while (c5); /*选择项不在05之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/int main() int i,n; ElemType e; LinkList L=NULL; /*定义指向单链表的指针*/ for (;) /*无限循环*/ switch (menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ /*值不同,执行的函数不同

21、,break 不能省略*/ case 1: printf(n1-Init LinkList:n); L=InitList(L); if(L!=NULL) printf(nInitLinkList OK!n); else printf(nInitLinkList Error!n); break; case 2: printf(n2-GetElem from LinkList:n); printf(input pos=); scanf(%d,&i); if (L!=NULL&GetElem(L,i,&e) printf(No%i is %d,i,e); printf(nPrintfList:n);

22、 PrintList(L); else printf(Error&Not exists!); break; case 3: printf(n3-Insert e into LinkList:n); printf(input pos=); scanf(%d,&i); printf(input e=); scanf(%d,&e); if(L!=NULL&InsertElem(L,i,e) printf(nInsert OK!n); printf(nPrintfList:n); PrintList(L); else printf(nInsert Error!n); break; case 4: pr

23、intf(n4-Delete from LinkList:n); printf(input pos=); scanf(%d,&i); if(L!=NULL&DeleteElem(L,i,&e) printf(nOKn); printf(nDelete data is %dn,e); printf(nPrintfList:n); PrintList(L); else printf(nDelete Error!n); break; case 5: printf(please input n:); /*输入单链表的元素个数*/ scanf(%d,&n); if (n0) printf(ERROR);

24、 break; printf(nCreate LinkList.n); L=CreateList(n); if (L=NULL) printf(Error!n); break; printf(nPrintfList:n); PrintList(L); break; case 0: printf(nDestroy linklist and free memory .n); if(L!=NULL) DestroyLinkList(L); L=NULL; exit(0); /*如菜单返回值为0程序结束*/ return 0;实验结果:(1)初始化链表:(2)查找元素:(3)插入数据:(4)删除数据:

25、(5)创建链表:(6)销毁和退出链表:3循环链表的应用(约瑟夫回环问题、)用整数序列1,2,3,n表示顺序坐在圆桌周围的人,并采用循环链表作为存储结构。任意位置k开始计数,计到m让此位置的人出局,重复上述过程,直至只剩下最后一个人。依次输出每个出局的人的序号。提示:用一个无头结点的循环单链表来实现n个元素的存储。exp2_3.c部分代码如下:#include#include#define ERROR 0#define OK 1typedef int ElemType; /*定义表元素的类型*/typedef struct LNode /*线性表的单链表存储*/ ElemType data; s

26、truct LNode *next; LNode,*LinkList;/*(1)-创建具有n个结点的无头结点的单向循环链表,返回其头指针*/LinkList CreateList(int n) LinkList L; L=(LinkList )malloc(sizeof(LinkList); LNode *q,*p; printf(输入元素:n); scanf(%d,&L-data); q=L; int a; for(a=0;adata); q-next=p; q=p; q-next=L; return L;/*CreateList*/*(2)-输出无头结点循环单链表的所有元素*/void PrintList(LinkList L) printf(输出表中的元素:); LNode *p; printf(%dn,L-data); p=L-next; while(p!=L) printf(n%dn,p-data); p=p-next; /*PrintList*/

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

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