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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

最新电大《数据结构》实验报告.docx

1、最新电大数据结构实验报告 数据结构形成性考核册 实验名称:实验一 线性表线性表的链式存储结构【问题描述】某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。(2)在链表中删除一个最高分和一个最低分的结点。(3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩。【基本要求】(1)建立一个评委打分的单向链表;(2)显示删除相关结点后的链表信息。(3)显示要求的结果。【实验步骤】(1)运行PC中的Microsoft Visual C+ 6.0程序,(2)点击“文件”“新建” 对话窗口中“文件

2、” “c+ Source File” 在“文件名”中输入“X1.cpp” 在“位置”中选择储存路径为“桌面” “确定”,(3)输入程序代码,程序代码如下:#include #include #include #include #include #define NULL 0 #define PWRS 5 /定义评委人数struct pw /定义评委信息 char name6; float score; int age; ; typedef struct pw PW; struct node /定义链表结点 struct pw data; struct node * next; ;typedef

3、struct node NODE; NODE *create(int m); /创建单链表 int calc(NODE *h); /计算、数据处理 void print(NODE *h); /输出所有评委打分数据 void input(NODE *s);/输入评委打分数据 void output(NODE *s);/输出评委打分数据 void main() NODE *head; float ave=0; float sum=0; head=create(PWRS); printf(所有评委打分信息如下:n); print(head);/显示当前评委打分 calc(head);/计算成绩 pr

4、intf(该选手去掉 1 最高分和 1 最低分后的有效评委成绩:n); print(head);/显示去掉极限分后的评委打分 void input(NODE *s) printf(请输入评委的姓名: ); scanf(%S,&s-data.name); printf(年龄: ); scanf(%d,&s-data.age); printf(打分: ); scanf(%f,&s-data.score); printf(n); void output(NODE *s) printf(评委姓名: %8s ,年龄: %d,打分: %2.2fn,s-data.name,s-data.age,s-data

5、.score); NODE *create(int m) NODE *head,*p,*q; int i; p=(NODE*)malloc(sizeof(NODE); head=p; q=p; p-next=NULL; for(i=1;inext=NULL; q-next=p; q=p; return (head); void print(NODE *h) for(int i=1;(inext!=NULL);i+) h=h-next; output(h); printf(n);int calc(NODE *h) NODE *q,*p,*pmin,*pmax; float sum=0; floa

6、t ave=0; p=h-next; /指向首元结点 pmin=pmax=p; /设置初始值 sum+=p-data.score; p=p-next; for(;p!=NULL;p=p-next) if(p-data.scorepmax-data.score) pmax=p; if(p-data.scoredata.score) pmin=p; sum+=p-data.score; cout给出最高分的评委姓名:data.name年龄: data.age分值:data.scoreendl; cout给出最低分的评委姓名:data.name年龄: data.age分值:data.scoredat

7、a.score; sum-=pmax-data.score; for (q=h,p=h-next;p!=NULL;q=p,p=p-next) if(p=pmin)q-next=p-next; p=q;/删除最低分结点 if(p=pmax) q-next=p-next; p=q;/删除最高分结点 ave=sum/(PWRS-2); cout该选手的最后得分是:aveendl; return 1; 程序运行结果如下:线性表的顺序存储结构【问题描述】用顺序表A记录学生的信息,编写程序:(1)将A表分解成两个顺序表B和C,使C表中含原A表中性别为男性的学生,B表中含原表中性别为女性的学生,要求学生的次

8、序与原A表中相同。(2)分别求男生和女生的平均年龄【基本要求】(1)建立学生信息的顺序表A。(2)显示B表和C表中的相关信息。(3)显示计算结果。【实验步骤;】(1)运行PC中的Microsoft Visual C+ 6.0程序,(2)点击“文件”“新建” 对话窗口中“文件” “c+ Source File” 在“文件名”中输入“X1.cpp” 在“位置”中选择储存路径为“桌面” “确定”,(3) 输入程序代码,程序代码如下:#include #include #include #include #include #include /包含库函数strcpy的头文件#define NULL 0s

9、truct student /定义学生信息 char name8; int sex; /0 女: 1:男 int age;typedef struct student STD;int create(STD *m); /创建顺序表int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage); /计算、数据处理void print(STD *m);const int MAX=100; /定义人数void main() STD AMAX; STD BMAX; STD CMAX; float age1=0,age2=0; /age1男 age2女 cre

10、ate(A); printf(学生总表A记录如下: n); print(A); calc(A,B,C,age1,age2); printf(女生名册B记录如下: n); print(B); printf(男生名册C记录如下: n); print(C);int create(STD *m) int n; printf (请输入班级总人数:n ); scanf (%d,&n); m0.age=n; /置顺序表 长度 printf(请输入学生信息:n); for(int i=1;i=n;i+) printf(姓名: ); scanf(%s,&mi.name); printf(性别0女1男: ); s

11、canf(%d,&mi.sex); printf(年龄: ); scanf(%d,&mi.age); printf(n); return 1;int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage) int i,j=1,k=1; n0.age=r0.age=0; for( i=1;i=m0.age;i+) if(mi.sex=0) strcpy(nj.name,mi.name); nj.sex=mi.sex; nj.age=mi.age; n0.age+; Mage+=mi.age;j+; else strcpy(rk.name,mi.nam

12、e); rk.sex=mi.sex; rk.age=mi.age; r0.age+;Fage+=mi.age;k+; Mage=Mage/n0.age; Fage=Fage/r0.age; cout女生的平均年龄是:Mage男生的平均年龄是:Fageendl; return 1;void print(STD *m) for(int i=1;inext=q-next; q-next=p; 尾插法:指针变量 q 始终指向尾结点,p 指针开辟单元,生成结 点: q-next=p; q=p; ?插入:p 所指向结点的后面插入新结点 s 所指结点 s-next=p-next; p-next=s; ?删除

13、:p,q 指向相邻结点,q 所指结点是 p 所指结点的后继,删除 q 所指结点, p-next=q-next; ?遍历:p=p-next;实验名称:实验二 栈、列队、递归程序设计2.1 栈和队列的基本操作【问题描述】编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。【基本要求】(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。(2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。【实验步骤;】(4)运行PC中的Microsoft Visual C+ 6.0程序,(5)点击“文件”“新建” 对话窗口中“文件” “c

14、+ Source File” 在“文件名”中输入“X1.cpp” 在“位置”中选择储存路径为“桌面” “确定”,(6)输入程序代码,程序代码如下:#include #include #define MaxSize 100typedef char ElemType;typedef struct ElemType dataMaxSize; int top; /栈顶指针 SeqStack;/定义栈typedef struct ElemType elemMaxSize; int front,rear; /队首和队尾指针 SqQueue;/定义队列/-初始栈函数void InitStack(SeqSta

15、ck *&s) s=(SeqStack *)malloc(sizeof(SeqStack); s-top=-1;/-进栈函数int Push(SeqStack *&s,ElemType e) if (s-top=MaxSize-1) return 0; s-top+; s-datas-top=e; return 1;/-显示栈函数void DispStack(SeqStack *s) int i; for (i=s-top;i=0;i-) printf(%c ,s-datai); printf(n);/-显示栈底元素void DispBottomStack(SeqStack *s) print

16、f(%c ,s-data0);/先进后出,栈底元素为第一个元素,即data0 printf(n);/-判空栈函数int StackEmpty(SeqStack *s) return(s-top=-1);/-出栈函数int Pop(SeqStack *&s,ElemType &e) if (s-top=-1) return 0; e=s-datas-top; s-top-; return 1;/-初始队列函数void InitQueue(SqQueue *&q) q=(SqQueue *)malloc (sizeof(SqQueue); q-front=q-rear=0;/-入队列函数int I

17、nQueue(SqQueue *&q,ElemType e) if (q-rear+1)%MaxSize=q-front) /队满 return 0; q-rear=(q-rear+1)%MaxSize; q-elemq-rear=e; return 1;/-出队列函数int OutQueue(SqQueue *&q,ElemType &e) if (q-front=q-rear) /队空 return 0; q-front=(q-front+1)%MaxSize; e=q-elemq-front; return 1;/-判空队列函数int QueueEmpty(SqQueue *q) ret

18、urn(q-front=q-rear);/-主程序void main() ElemType e; SeqStack *s; printf(1)初始化栈sn); InitStack(s); printf(2)栈为%sn,(StackEmpty(s)?空:非空); printf(3)依次进栈元素a,b,c,d,en); Push(s,a);/入栈元素1 Push(s,b);/入栈元素2 Push(s,c);/入栈元素3 Push(s,d);/入栈元素4 Push(s,e);/入栈元素5 printf(4)栈为%sn,(StackEmpty(s)?空:非空); printf(5)从栈顶到栈底元素:)

19、;DispStack(s); printf(6)栈底元素为:);DispBottomStack(s); printf(7)出栈/入队列序列:); SqQueue *q; InitQueue(q); while (!StackEmpty(s) Pop(s,e);/出栈 printf(%c ,e); InQueue(q,e);/入队 printf(n); printf(8)栈为%s,(StackEmpty(s)?空:非空); printf(队列为%sn,(QueueEmpty(q)?空:非空); printf(9)出队列/入栈序列:); while (!QueueEmpty(q) OutQueue

20、(q,e);/出队 Push(s,e);/入栈 printf(%c ,e); printf(n); printf(10)栈为%s,(StackEmpty(s)?空:非空); printf(队列为%sn,(QueueEmpty(q)?空:非空); free(q);/释放队列 printf(11)从栈顶到栈底元素:);DispStack(s); free(s);/释放栈 程序运行结果如下:2.2 递归程序设计【问题描述】给定一个5位的十进制正整数,用递归法分别编制程序:(1)要求从低位到高位逐次输出各位数字。(2)要求从高位到低位逐次输出各位数字。【基本要求】(1)比较题中两种不同要求的递归程序设

21、计和执行过程差别。(2)正确理解递归程序的执行过程。(3)显示计算结果。【实验步骤】(1)运行PC中的Microsoft Visual C+ 6.0程序,点击“文件”“新建” 对话窗口中“文件” “c+ Source File” 在“文件名”中(2)输入“X1.cpp” 在“位置”中选择储存路径为“桌面” “确定”,(3) 输入程序代码程序代码如下:#include#includevoid out(int n,int i)/从高位到低位输出函数int x,y;y=int(pow(10,i);if (n!=0)x=n/y;n=n-x*y;printf(%d ,x);else printf(0 )

22、;i-;if(i=0) out(n,i);void out1(int m,int j)/从低位到高位输出函数int x,z;if (m!=0)x=int(m/10);z=m-x*10;m=x;printf(%d ,z);else printf(0 );j-;if(j=0) out1(m,j);void main()int m,n,o,x,i,j;printf(输入需要排列的数字:n);scanf(%d,&o);m=n=o;x=n;i=-1;while(x!=0)x=x/10;i+;/求出i为十进制正整数位数j=i;printf(n);printf(从高位到低位逐次输出各位数字:);out(n,

23、i);printf(n);printf(从低位到高位逐次输出各位数字:);out1(m,j);printf(n); 程序运行结果如下:实验结论:栈和队列是运算受限制的线性表 栈:后进先出(LIFO) 例:进栈b, c, d, e, f 出栈可能为 f, e, d, c, b; b, c, d, e, f ; c, b, e, d, f 但不可能是e, d, f, b, c 队列:先进先出(FIFO) 例:入队1,2,3,4,5 出队1,2,3,4,5实验名称:实验三 二叉树3.1 二叉树的顺序存储结构和链式存储结构【问题描述】设一棵完全二叉树用顺序存储方法存储于数组tree中,编写程序:(1)

24、根据数组tree,建立与该二叉树对应的链式存储结构。(2)对该二叉树采用中序遍历法显示遍历结果。【基本要求】(1)在主函数中,通过键盘输入建立设定的完全二叉树的顺序存储结构。(2)设计子函数,其功能为将顺序结构的二叉树转化为链式结构。(3)设计子函数,其功能为对给定二叉树进行中序遍历,显示遍历结果。(4)通过实例判断算法和相应程序的正确性。【实验步骤】(7)运行PC中的Microsoft Visual C+ 6.0程序,(8)点击“文件”“新建” 对话窗口中“文件” “c+ Source File” 在“文件名”中输入“X1.cpp” 在“位置”中选择储存路径为“桌面” “确定”,(9)输入程

25、序代码,程序代码如下:#include#include#include#include#include#define MaxSize 10typedef struct node char data; struct node *left,*right;NODE;void Creab(char *tree,int n,int i,NODE *p);void Inorder(NODE *p);void main() NODE *p; char treeMaxSize; int n=1; int i=1; printf(请输入完全二叉数的节点值(连续输入字符,以回车结束输入。):); while(treen = getchar( ) != n) n+; treen =n; p=NULL; Creab(tree,n,i,p); Inorder(p);void Creab(char *tree,int n,int i,NODE *p) if(i=n) p=NULL; else p=(NODE *)mall

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

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