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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构》课程实验教学大纲Word文件下载.docx

1、9最小生成树的建立10排序和查找的算法选作三、对培养学生的能力要求要求学生理解数据结构的基本算法,并能够用程序设计语言实现这些算法。灵活运用数据结构的基本算法解决的实际问题,培养学生的数据抽象能力和复杂编程能力。1. 完成线性表的顺序存储结构和链式存储结构的基本操作的实现,并能设计实现线性的应用程序,提高编程能力。2. 完成栈和队列的顺序存储结构和链式存储结构的基本操作的实现。3. 完成二叉树和树的存储、遍历等基本操作的实现。4. 完成图的存储、遍历等基本操作的实现。5. 掌握各种查找和排序的算法,设计一个综合应用程序,为后续课程的应用打下基础。四、本实验课程对学生的考核评分方法本实验课程成绩

2、应占整个课程成绩的10;考勤情况占整个实验成绩的的20;实验报告占整个实验成绩的70;五、说明本实验教学大纲适用于计算机技术及应用专业、信息管理专业以及数统专业的本科生。实验的学时总数为8学时。可根据讲课进度安排上机时间,也可根据不同情况适当增加实验上机时数,以适应不同专业的需要。数据结构课程实验指导书河北经贸大学信息技术学院目 录实验1 抽象数据类型 6实验2 线性表的基本操作 8实验3 栈和队列的基本操作 16实验4 迷宫问题递归 21实验5 广义表的基本操作 23实验6 二叉树的基本操作 26实验7 哈夫曼树及哈夫曼编码 31实验8 图的基本操作 34实验9 最小生成树的建立 43实验1

3、0 查找和排序 46实验1 抽象数据类型1实验目的(1) 熟悉抽象数据类型的表示与实现方法。(2) 复习高级编程语言C+的使用方法。2 实验内容设计一个可进行复数运算的演示程序。【基本要求】实现下列六种基本运算:(1)由输入的实部和虚部生成一个复数;(2)两个复数求和;(3)两个复数求差;(4)两个复数求积;(5)从已知复数中分离出实部;(6)从已知复数中分离出虚部。运算结果以相应的复数或实数的表示形式显示。【测试数据】自定参考程序如下:/ 抽象数据类型复数的表示与实现#include typedef struct RECORD double real; double image; cmptp

4、; int create(double x,double y,cmptp &z) z.real=x; z.image=y; return 1; int add(cmptp z1,cmptp z2,cmptp &sum) sum.real=z1.real+z2.real; sum.image=z1.image+z2.image; int SUBSTRACT(cmptp z1,cmptp z2,cmptp &difference) difference.real=z1.real-z2.real; difference.image=z1.image-z2.image; int multiply(cm

5、ptp z1,cmptp z2,cmptp &product) product.real=(z1.real*z2.real)-z1.image*z2.image; product.image=z1.image*z2.real+z1.real*z2.image; double getreal(cmptp z) return z.real; double getimage(cmptp z) return z.image;/ 上机调试验证 void main() cmptp z; create(1,2,z); coutz.realz.imageendl; cmptp z1=3,4;getreal(z

6、1) cmptp z2=5,6; cmptp sum; add(z1,z2,sum);sum.real sum.image SUBSTRACT(z1,z2,sum); multiply(z1,z2,sum);3 实验要求按要求编写实验程序,将实验程序上机调试运行,并提交实验报告。实验2 线性表的基本操作(1) 熟练掌握线性表的逻辑特征。(2)熟练掌握线性表的基本操作在两种存储结构上的实现。2实验内容(1) 设计一个顺序表的基本操作的演示程序(2) 设计一个单链表的基本操作的演示程序(3) 设计一个双链表的基本操作的演示程序实现下列4种基本运算:(1)初始化线性表;(2)在第I个元素前插入一个元

7、素e;(3)删除第I个元素;(4)遍历线性表;(5)将单链表逆置/顺序表的基本操作/顺序表的定义#define MAX 15typedef struct int elemMAX; int length;Sqlist;void Initlist_sq(Sqlist &L);void ListInsert_sq(Sqlist &L,int i, int e);void ListDel_sq(Sqlist &L,int i, int &e);void print_sq(Sqlist L);/ 函数的定义L) L.length =0;L,int i, int e) int *p,*q; if(iL.l

8、ength +1) return; q=&L.elemi-1; /插入位置 for(p=&L.elemL.length -1;p=q;-p ) *(p+1)=*p; *q=e; +L.length ; return;e)L.length ) return; e=L.elemi-1; for(int j=i;jL.length ;j+) L.elemj-1=L.elemj; -L.length ;void print_sq(Sqlist L) int *p,*q=L.elem+L.length-1 ; for(p=L.elem;pp+ ) cout*p ;nvoid main() int a11

9、=10,20,30,40,50,60,70,80,90,100; Sqlist L; /初始化顺序表 Initlist_sq(L);现在的表长: L.length / 插入10个数据元素 for( int i=1;i=10;+i) ListInsert_sq(L, i, ai-1);插入10个元素后的线性表: /遍历 print_sq( L); /删除第5个元素 int x; ListDel_sq(L,5, x);删除的元素值是:xnext ; while(p)p-datanext; /后移指针void Setup_L(NODE * &head,int n) NODE *q,*p; head=

10、(NODE*)new NODE; head-next=NULL; /先建立一个带头结点的单链表 q=head; for(int i=0;n;i+) p=(NODE *)new NODE; /生成新结点 p-data=datai; q-next=p; q=p; /插入到表头next =NULL; NODE *p=L,*q; int j=0; while(p&i-1) p=p- j+; if(!p|j coutnext =q;void Delete_L(NODE *&L,int i,int &删除值超出范围! q=p- e=q-data ;next =q- delete q; NODE *p,*q

11、,*r; p=L- while(q) r=q- q-next =p; L-next=q; p=q; q=r;/双链表的基本操作 NODE *prior;int data6=3,5,7,19,20,21; /测试用数据/ 函数声明void Setup_L(NODE*&L,int i,int e);void Convert_L(NODE*&/ 主函数和各函数的定义 Insert_L(L,7,50); print (L); Delete_L(L,1,x); / 从头开始顺序输出双连表中的数据 cout /创建一个带头结点的双连表 p=(NODE*)new NODE; p- /cindata;prio

12、r=q;q-q=p; /return(head);L,int i,int e)/在带头结点的双链表中第i个位置插入元素e NODE*p=L,*q; /j为计数器i-1) p=p- /寻找第i-1个结点i-1) /i小于1或大于表长插入值超出范围! if(p-next=NULL) q-next=p- else next-prior=p; /插入L中void Delete_L(NODE*&/在带头结点的双链表L中,删除第i个元素,并由e返回其值i-1) /寻找第i-1个结点删除值超出范围!/删除位置不合理next=q-/删除并释放结点实验3 栈和队列的基本操作(1) 深入了解栈和队列的基本特性(2

13、) 熟练掌握栈的基本操作在两种存储结构上的实现。(3) 熟练掌握循环队列的基本操作(4) 熟练掌握链队列的基本操作(1) 设计一个顺序栈的基本操作的演示程序(2) 设计一个链栈的基本操作的演示程序(3) 设计一个循环队列的基本操作的演示程序(4) 设计一个链队列的基本操作的演示程序实现下列6种基本运算:(1)初始化;(2)入栈(队列);(3)出栈(队列);(4)遍历;(5)求栈(队列)的长度/顺序栈的基本操作#define MAX 10 int base; int top; int stMAX; SqStack; /基本操作说明 void InitStack(SqStack &S); void

14、 push(SqStack &S, int e); void pop(SqStack &S,int & /基操作的算法描述void InitStack(SqStack &S) S.base=S.top=0;void push(SqStack &S, int e) if(S.top=MAX) ”栈满n”; S.stS.top =e; S.top+=1; if(S.top =0) ”栈空n”; S.top -=1; e=S.stS.top ; void print(SqStack S)”栈的各个元素如下:n”; for(int I=0;IS.top ;I+)S.stI” “; SqStack S;

15、 /初始化”初始化栈n”;InitStack(S);”栈底和栈顶:”S.base”,”S.top /入栈”5个元素入栈n”;5; push(S, 2*I+1);”栈顶为:S.top print(S); /出栈 pop(S,x);”出栈元素为:”栈顶”/循环队列的基本操作#define MAX 8 typedef struct int baseMAX; int front; int rear; SqQueue;/* 初始化 */void InitQueue(SqQueue &Q) Q.front=Q.rear=0;/*求队列长度*/int QueueLength(SqQueue Q) retur

16、n (Q.rear-Q.front+MAX)%MAX;/*入队列*/void EnQueue(SqQueue &Q,int e) if(Q.rear+1)%MAX=Q.front) ”队列满! else Q.baseQ.rear=e; Q.rear=(Q.rear+1)%MAX;/*遍历队列*/void traverse(SqQueue &Q) int I, k; if (Q.front=Q.rear) k=0; k=1; switch(k) case 0: for(I=Q.front;Q.rear;Q.baseI break; case 1: for(I=Q.front;MAX; for(I=0;Q.rear ;break;/*出队*/int DeQueue(SqQueue &Q,int & if (Q.rear=Q.front) return 1; e=Q.baseQ.front; Q.front=(Q.front+1)%MAX; SqQueue Q; InitQueue(Q); int j,m,x; for(j=0;7; EnQueue(Q,2*j); traverse(Q);m=QueueLength(Q);cout”n长度”mEnQueue(Q,500);DeQueue(Q,x);

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

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