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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验最全顺序表的操作及其应用.docx

1、数据结构实验最全顺序表的操作及其应用 实验1 顺序表的操作及其应用一、实验目的 1)掌握线性表的顺序存储结构;2)熟练掌握顺序表基本算法的实现;3)掌握利用线性表数据结构解决实际问题的方法和基本技巧;4)按照实验题目要求独立正确地完成实验内容二、实验内容要求:数据元素类型ElemType 取整型int 或者char。顺序存储实现如下算法:1)创建一顺序表;2)输出该顺序表;3)在顺序表中查找第i 个元素,并返回其值;4)在顺序表中第i 个元素之前插入一已知元素;5)在顺序表中删除第i 个元素;6)实现顺序表的合并。(选做) 源程序:/A Sequential List顺序表#include #

2、include #include #include #include #include #define InitSize 100 /线性表存储空间的初始分配量#define ListIncrement 10 /线性表存储空间的分配增量typedef int ElemType;typedef struct ElemType *elem; int length; int listsize;SqList;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typ

3、edef int Status;Status InitList(SqList &L) /初始化 L.elem=(ElemType *)malloc(InitSize*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=InitSize; return OK; /求表长int ListLength(SqList &L) return L.length;/输入元素int DataInput(SqList &L) int i=1,j=1; printf(输入数据后,按“0”结束输入n); while(j) scan

4、f(%d,&j); if(j!=0) L.elemi=j; L.length+; i+; if(iInitSize) break; return FALSE;/输出顺序表Status ListTraverse(SqList L) ElemType *p; int i; p=L.elem; for(i=0;iL.length;i+) printf(%d ,*p+); printf(n); return OK;/查找元素Status GetElem(SqList L,int i,ElemType &e) if(iL.length) exit(ERROR); e=L.elemi-1; return

5、OK;/插入元素Status ListInsert(SqList &L,int i,ElemType e) ElemType *newbase,*q,*p; if(iL.length+1) return ERROR; if(L.length=L.listsize) newbase=(ElemType *) realloc(L.elem,(L.listsize+ListIncrement)*sizeof(ElemType); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize=L.listsize+ListIncrement; q=&(

6、L.elemi-1); for(p=&(L.elemL.length-1);p=q;-p) *(p+1)=*p; *q=e; +L.length; return OK;/删除元素Status ListDeletSq(SqList &L,int i,ElemType &e) ElemType *p,*q; if(iL.length) return ERROR; p=&(L.elemi-1); e=*p; q=L.elem+L.length-1; for(+p;p=q;+p) *(p-1)=*p; -L.length; return OK;/主函数int main() SqList L; Elem

7、Type e; char ch; int t; while(1) system(cls); printf(t-MENU-n); printf(t|1.创建一顺序表 |n); printf(t|2.输入数据 |n); printf(t|3.输出顺序表 |n); printf(t|4.查找表中元素 |n); printf(t|5.于表中插入元素 |n); printf(t|6.删除表中元素 |n); printf(t|7.退出 |n); printf(t|-n); fflush(stdin); ch=getchar(); if(ch=7) break; switch(ch) case 1: Ini

8、tList(L); printf(初始化顺序表成功!n); printf(按任何键继续操作n); getch(); break; case 2:DataInput(L); printf(数据输入成功!n); printf(按任何键继续操作n); getch(); break; case 3:ListTraverse(L); getch(); break; case 4:printf(你查找是第几个元素:); fflush(stdin); scanf(%d,&t); GetElem(L,t,e); printf(你查找的元素是:%dn,e); printf(按任何键继续操作n); getch()

9、; break; case 5:printf(输入你要插入的元素:); scanf(%d,&e); ListInsert(L,t,e); printf(成功插入!n); printf(按任何键继续操作n); getch(); break; case 6:printf(你想删除第几个数据:); scanf(%d,&t); ListDeletSq(L,t,e); printf(成功删除!n); printf(按任何键继续操作n); getch(); break; default:break; return FALSE;运行截图: 主菜单:1. 创建顺序表;2. 输入数据:3. 插入数据:三、实验总

10、结: 问题:1. 刚开始接触数据结构时,完全不知道这门课程是学什么的,一脸茫然,通过反复看书,最后逐渐明白了其中的含义。2. 有些c语言的函数和c+语言函数不同。3. 函数和指针的知识还不够好,不够牢固。心得体会; 数据结构是一门重要的课程,万事开头难,刚开始学的时候是很难的,需要自己反复地思考和阅览书籍,才能解开一个个矛盾。C语言是很基础的,数据结构要想学好,c语言的最基本,特别是要学好里面的函数和指针知识,因为数据结构里面很多都是用到指针和函数的。 实验二 链表的操作及其应用一、实验目的了解单链表的基本概念、结构的定义及在单链表上的基本操作(插入、删除、查找以及线性表合并),通过在Turb

11、o C实现以上操作更好的了解书本上的内容并体会线性表的两种存储结构的区别。二、实验内容 单链表的插入算法 单链表的删除算法 循环链表的插入和删除算法(选做)源程序:#include #include #include #include typedef int ElemType;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkL

12、ist;Status CreateList(LinkList &L,int n)/ 创建链表 L=(LinkList)malloc(sizeof(LNode);/生成带头结点的链表 LinkList head,p; int i; if(!L) printf(创建失败!); return FALSE; L-next=NULL; head=L; for(i=0;idata);/输入新结点值 p-next=NULL;/尾插法,插入新结点 head-next=p; head=p; return TRUE;Status GetElem_L(LinkList L,int i,ElemType &e) in

13、t j=1; LinkList p; p=L-next;/使p指向第一个结点 while(p&jnext; /后移 +j; if(!p|ji)/第i个元素不存在 printf(取元素失败!); return ERROR; e=p-data;/取第i个元素 return OK; Status ListInsert_L(LinkList &L,int i,ElemType e)/在带头结点的单链表L中的第i个位置之前插入元素e LinkList p,s; p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) printf(插入失败!); return ERROR

14、; s=(LinkList)malloc(sizeof(LNode);/生成新结点指向要插入的元素 s-data=e; s-next=p-next; p-next=s; return OK;Status ListDelete_L(LinkList L,int i,ElemType &e)/在带头结点的单链表L中,删除第i个元素,并由e返回其值 LinkList p,q; int j=0; p=L; while(p-next&jnext; +j; if(!p|ji-1) printf(删除元素失败!); return ERROR; /删除位置不合理 q=p-next; /删除并释放结点 p-ne

15、xt=q-next; e=q-data; free(q); return OK;Status OutputList(LinkList L) LinkList p; for(p=L-next;p!=NULL;p=p-next) printf(%4d,p-data); printf(n); return OK;main() char ch; int n,i; int e; LinkList L; while(1) system(cls); printf(ttt-MENU-n); printf(ttt|1.创建链表 |n); printf(ttt|2.输出链表 |n); printf(ttt|3.插

16、入元素 |n); printf(ttt|4.删除元素 |n); printf(ttt|5.退出 |n); printf(ttt|-|n); ch=getchar(); if(ch=5) break; switch(ch) case 1: printf(请输入你要创建的结点数:); scanf(%d,&n); printf(每输入一个值后按ENTER继续)n); CreateList(L,n); printf(创建成功!n); break; case 2:printf(单链表的值是:); OutputList(L); getch(); break; case 3:printf(链表是:); Ou

17、tputList(L); printf(请输入你要在第几个元素前插入元素:); scanf(%d,&i); printf(请输入你要插入的元素值:); scanf(%d,&e); ListInsert_L(L,i,e); printf(插入成功!n); printf(新单链表是:); OutputList(L); getch(); break; case 4:printf(链表是:); OutputList(L); printf(你要删除第几个元素:); scanf(%d,&i); ListDelete_L(L,i,e); printf(删除成功!n); printf(新单链表是:); Out

18、putList(L); getch(); break; default:break; getch(); return OK;运行截图:主菜单:1. 创建链表:2. 输出链表:3. 插入元素:4. 删除链表:三、实验总结:问题:1. 创建链表时,运用前插法,使得最后输出时是反过来输出的;2. 在调用函数ListInsert_L(L,i,e);时忘记写输入e的语句scanf(%d,&e); (就是要插入的元素),使得在最后输出了一个负数或者说是乱码; 解决方法:1.通过看书和上网学到了尾插法,就是说尾插法的作用是使得最后输出时的数值是按照输入的顺序输出的;3. 第二个问题的解决方法是最后加上了sc

19、anf(%d,&e);这个语句,这样才不会出现乱码,输出如我所愿; 心得体会:通过对实验一的学习后,我对数据结构有了更深刻的认识,使得我在做实验的过程中速度加快了很多,掌握了各种函数的应用,能够更深刻地了解单链表的操作及其应用。 实验三 栈的操作及其应用一、实验目的 了解栈的概念、栈的特性、在两种存储结构上如何实现栈的基本操作以及栈在程序设计中的应用。通过在Turbo C中实现顺序栈的插入和删除加深理解顺序栈的意义。二、实验内容 顺序栈的进栈、出栈算法 链式栈的进栈、出栈算法(选做)源程序code:#include #include #include typedef int selemtype

20、;#define chushi 100#define zengliang 10#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef struct selemtype *base; selemtype *top; int stacksize;sqstack;Status initstack(sqstack &s) /初始化栈,构造一个空栈; s.base=(selemtype *)malloc(chushi* sizeof(selemtype);

21、if(!s.base) printf(存储分配失败n!); return FALSE; s.top=s.base; s.stacksize=chushi; return TRUE;Status gettop(sqstack s,selemtype &e)/取栈顶元素 if(s.top=s.base) printf(栈为空!n); return FALSE; e=*(s.top-1); return TRUE;Status push(sqstack &s,selemtype e)/插入元素 进栈 if(s.top-s.base=s.stacksize)/栈满 s.base=(selemtype

22、*)realloc(s.base,(s.stacksize+zengliang)*sizeof(selemtype); if(!s.base) printf(存储分配失败!); return FALSE; s.top=s.base+s.stacksize; s.stacksize+=zengliang; *s.top+=e; return TRUE;Status pop(sqstack &s,selemtype &e)/删除元素 出栈 if(s.top=s.base) printf(栈为空!); return FALSE; e=*-s.top; return TRUE;stacklength(

23、sqstack &s) /初始条件:栈S已存在 操作结果:返回S的元素个数,即栈的长度 return s.top-s.base; Status output_stack(sqstack s) selemtype *p; int i; p=s.base; if(s.top=s.base) printf(栈不存在!n); return FALSE; for(i=0;istacklength(s);i+) printf(%4d,*p+); printf(n); return TRUE;Status clearstack(sqstack s) s.top=s.base; /s.top = s.base

24、作为顺序栈空的标记 return OK; main() sqstack s; char ch; selemtype e; while(1) system(cls); printf(ttt-MENUE-n); printf(ttt|1.初始化顺序栈 |n); printf(ttt|2.输入栈的元素 |n); printf(ttt|3.输出顺序栈 |n); printf(ttt|4.进栈 |n); printf(ttt|5.出栈 |n); printf(ttt|6.清空顺序栈 |n); printf(ttt|7.退出 |n); printf(ttt|-|n); ch=getchar(); if(c

25、h=7) break; switch(ch) case 1:initstack(s) ; printf(初始化成功!n); printf(按任何键继续); getch(); break; case 2:printf(顺序栈是:); output_stack(s); printf(请逐个输入数据)n你要输入的元素是:); scanf(%d,&e); push(s,e); printf(成功输入数据!n); printf(顺序栈是:); output_stack(s); printf(按任何键继续); getch(); break; case 3:printf(顺序栈的值是:); output_stack(s); printf(按任何键继续); getch(); break; case 4:printf(顺序栈的值是:); output_stack(s); printf(进栈的元素:); scanf(%d,&e); push(s,e); printf(进栈成功!n); printf(顺序栈的值是:); output_stack(s); printf(按任何键继续); getch(); break; case

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

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