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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告C语言强力推荐.docx

1、数据结构实验报告C语言强力推荐数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。学习基本的查找和排序技术。让我们在实际上机中具有编制相当规模的程序的能力。养成一种良好的程序设计风格。实验教材:数据结构题集(C语言版) 清华大学出版社 2007年实验项目:实验一、栈和循环队列、实验内容:1 栈 掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。2 循环队列 掌

2、握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。、实验代码1 栈程序代码:#include #include #define Stack_Size 6#define ERROR 0#define OK 1typedef int SElemType;typedef struct SNode SElemType data; struct SNode *next;SNode,*LinkStack;int CreatTwo(LinkStack &head,int n

3、) int i; SNode *p; head=(LinkStack)malloc(sizeof(SNode); head-next=NULL; printf(请输入数据(数字):n); for(i=n;i0;-i) p=(SNode *)malloc(sizeof(SNode); scanf(%d,&p-data); p-next=head-next; head-next=p; return 1;int menu_select() int sn; for(;) scanf(%d,&sn); if(sn6) printf(nt输入错误,请重新输入n); else break; return s

4、n;int Push(LinkStack &top,SElemType e) SNode *q; q=(LinkStack)malloc(sizeof(SNode); if(!q) printf(溢出!n); return(ERROR); q-data=e; q-next=top-next; top-next=q; return(OK);int Pop(LinkStack &top,SElemType &e) SNode *q; if(!top-next) printf(error!n); return(ERROR); e=top-next-data; q=top-next; top-next

5、=q-next; free(q); return(OK);void main() int e; LinkStack top; printf(1.初始化一个栈;n2.PUSH;n3.POP;n4.显示所有栈里的元素;n5.结束;n); while(1) switch(menu_select() case 1: if(CreatTwo(top,Stack_Size)printf(Success!n);break; case 2: printf(Push:n); scanf(%d,&e); if(Push(top,e)printf(Success!n); break; case 3: if(Pop(

6、top,e)printf(Success!n); printf(%dn,e); break; case 4: LinkStack p; printf(所有栈里的元素:n); p=top; while(p-next) p=p-next; printf(%7d,p-data); printf(n); break; case 5: return; 运行结果:2 循环队列程序代码:#include#include#define OVERFLOW -1#define OK 1#define ERROR 0#define MAXSIZE 100typedef struct int *elem;/队列存储空

7、间 int front; int rear;SqQueue;/判断选择是否正确int menu_select() int sn; for(;) scanf(%d,&sn); if(sn6) printf(nt输入错误,请重新输入n); else break; return sn;/参数(传出)SqQueue &Q,循环队列(空)int InitQueue(SqQueue &Q) Q.elem=(int *)malloc(MAXSIZE*sizeof(int); if(!Q.elem)exit(OVERFLOW); Q.front=Q.rear=-1; for(int i=0;iMAXSIZE;

8、i+) Q.elemi=-1; return OK;/返回Q的元素个数int QueueLength(SqQueue Q) return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;/显示队列的元素void Display(SqQueue Q) for(int i=0;i=QueueLength(Q);i+) if(Q.elemi!=-1)printf(%d ,Q.elemi); printf(n);/入队int EnQueue(SqQueue &Q,int e) Q.rear=(Q.rear+1)%MAXSIZE; if(Q.rear=Q.front)return ER

9、ROR; Q.elemQ.rear=e; return OK;/出队int DeQueue(SqQueue &Q,int &e) if(Q.front=Q.rear)return ERROR; e=Q.elemQ.front+1; Q.elemQ.front+1=-1; Q.front=(Q.front+1)%MAXSIZE; return OK;void main() SqQueue Q; InitQueue(Q); int elem,e; printf(请输入队列元素(以0结束):n); scanf(%d,&elem); while(elem!=0) EnQueue(Q,elem); sc

10、anf(%d,&elem); printf(队列为:n); Display(Q); printf(1.初始化一个队列;n2.入队;n3.出队;n4.显示队列的所有元素;n5.队列长度:n6.结束;n); while(1) switch(menu_select() case 1: printf(请输入队列元素(以0结束):n); scanf(%d,&elem); while(elem!=0) EnQueue(Q,elem); scanf(%d,&elem); printf(队列为:n); Display(Q); fflush(stdin); break; case 2: scanf(%d,&el

11、em); EnQueue(Q,elem); printf(队列为:n); Display(Q); fflush(stdin); break; case 3: DeQueue(Q,elem); printf(队列为:n); Display(Q); break; case 4: printf(n队列的所有元素:n); Display(Q); break; case 5: printf(%dn,QueueLength(Q); break; case 6: return; 运行结果:实验二、数组、实验内容: 数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就

12、不再发生变动。本程序数组的大小定义为3*3,可以通过修改“#define M”来变动。本程序具有矩阵相加、矩阵A转置、矩阵B转置、矩阵相乘四个功能。、实验代码:#include #define M 3void MatrixAdd(int m1MM,int m2MM,int resultMM)/两个矩阵m1和m2相加,结果放到result int i,j; for (i=0;iM;i+) for(j=0;jM;j+) resultij=m1ij+m2ij; void MatrixTrams(int m1MM,int resultMM)/矩阵转置 int i,j; for (i=0;iM;i+)

13、for (j=0;jM;j+) resultij=m1ji; void MatrixMultiply(int m1MM,int m2MM,int resultMM) int i,j; for (i=0;iM;i+) for (j=0;jM;j+) resultij=0; for (int k=0;kM;k+) resultij+=m1ik*m2kj; void Display(int resultMM)/显示矩阵 int i,j; for (i=0;iM;i+) for(j=0;jM;j+) printf(%-5d,resultij); printf(n); void main() int A

14、MM,BMM; int i,j; printf(请输入第一个矩阵:n); for(i=0;iM;i+) for(j=0;jM;j+) scanf(%d,&Aij); printf(请输入第二个矩阵:n); for(i=0;iM;i+) for(j=0;jM;j+) scanf(%d,&Bij); int resultMM; /*printf(n 矩阵A:n); Display(A); printf(n 矩阵B:n); Display(B);*/ printf(请选择:n1.矩阵相加:n2.矩阵A转置:n3.矩阵B转置:n4.矩阵相乘:n5.退出。nn); while (1) int l; sc

15、anf(%d,&l); switch(l) case 1: printf(矩阵相加的运算结果:n); MatrixAdd(A,B,result); Display(result); printf(n); break; case 2: printf(矩阵A转置的运算结果:n); MatrixTrams(A,result); Display(result); printf(n); break; case 3: printf(矩阵B转置的运算结果:n); MatrixTrams(B,result); Display(result); printf(n); break; case 4: printf(

16、矩阵相乘的运算结果:n); MatrixMultiply(A,B,result); Display(result); printf(n); break; case 5: printf(退出。n); return; default: printf(输入错误!); printf(n); 实验结果:实验三、查找1 、实验内容掌握各种查找(顺序、二分法、查找树、哈希)方法及适用场合,并能在解决实际问题时灵活应用。本实验采用二分查找。二分查找又称折半查找,它是一种效率较高的查找方法。折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于

17、不经常变动而查找频繁的有序列表。本程序具有找出数据位置和显示查找次数两个功能。、实验代码:#include #define MAX 100void main() int rMAX,i,k,low,high,mid,m,n; printf(nn 建立递增有序的查找顺序表(以-1结束):n); for(i=0;iMAX;i+) scanf(%d,&ri); if(ri=-1) n=i; break; printf(n 请输入要查找的数据:n); scanf(%d,&k); low=0;high=n-1;m=0; while(lowk) high=mid-1; else if(rmidhigh) p

18、rintf(没有找到n); printf(共进行%d次比较。n,m); if(rmidk) mid+; printf(可将这个数插入到第%d个数的后面。n,mid); else printf(n 要找的数据=%d在第%d个数的位置上。n,k,mid+1); printf(nn 共进行了%d次比较。n,m); 实验结果:实验四、树1 、实验内容:进一步掌握树的结构及非线性特点,递归特点和动态性;进一步巩固对指针的使用和二叉树的三种遍历方法、建立方法及用广义表进行输入输出。本程序将第一个元素作为树根,其余元素若小于树根则为左子树,若大于树根则为右子树。本程序具有求左子树、求右子树、求深度、先序遍历

19、、中序遍历(递归算法)、中序遍历(非递归算法)、后序遍历六个功能。、实验代码/描述:两个指针指向左右孩子,算法见教材#include #include #define MAX 50typedef struct btnode int Data; struct btnode *Llink; struct btnode *Rlink;btnode,*btreetype;btreetype CreatTree(int n)/传入数据数量,返回根结点指针 int i; btreetype root=NULL; for (i=0;iData); newNode-Llink=NULL; newNode-Rl

20、ink=NULL; currentNode=root; if(currentNode=NULL)root=newNode; else while (currentNode!=NULL) parentNode=currentNode; if(newNode-DataData) currentNode=currentNode-Llink; else currentNode=currentNode-Rlink; if(newNode-DataData) parentNode-Llink=newNode; else parentNode-Rlink=newNode; return root; void

21、 OutputTree(btreetype &root) btreetype p; p=root-Llink; printf(建立的二叉树的左子树为:n); while (p!=NULL) printf(%-8d,p-Data); p=p-Llink; p=root-Rlink; printf(n建立的二叉树的右子树为:n); while (p!=NULL) printf(%-8d,p-Data); p=p-Rlink; int depth(btreetype root) btreetype p; p=root; int dep1; int dep2; if(root=NULL)return

22、0; else dep1=depth(p-Llink); dep2=depth(p-Rlink); if(dep1dep2)return(dep1+1); else return(dep2+1); void PreOrder(btreetype &root)/先序遍历(递归) btreetype p; p=root; if (p!=NULL) printf(%-5d,p-Data); PreOrder(p-Llink); PreOrder(p-Rlink); void InOrder(btreetype &root)/中序遍历(递归) btreetype p; p=root; if (p!=N

23、ULL) InOrder(p-Llink); printf(%-5d,p-Data); InOrder(p-Rlink); void InOrder_Norecuision(btreetype &root) btreetype stackMAX; btreetype p; int top=0; p=root; do while (p!=NULL) top+; stacktop=p; p=p-Llink; if (top0) p=stacktop; top-; printf(%-5d,p-Data); p=p-Rlink; while (p!=NULL|top!=0);void PostOrde

24、r(btreetype &root) btreetype p; p=root; if (p!=NULL) PostOrder(p-Llink); PostOrder(p-Rlink); printf(%-5d,p-Data); void main() btreetype btree; int count; printf(请输入元素个数:n); scanf(%d,&count); printf(请输入数据:n); btree=CreatTree(count); OutputTree(btree); printf(n建立的二叉树的深度为:%dn,depth(btree); printf(n先序遍历:n); PreOrder(btree); printf(n中序遍历(递归算法):n); InOrder(btree); printf(n中序遍历(非递归算法):n); InOrder_Norecuision(btree); printf(n后序遍历:n); PostOrder(btree); printf(n);实验结果:数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。学习基本的查找和排序技术。让我们在实际上机中具有编制相当规模的程序的能力。养成一种良好的程序设计风格。

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

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