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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构》课程实验教学大纲.docx

1、数据结构课程实验教学大纲数据结构课程实验教学大纲【课程名称】: 数据结构/Data Structure【课程学时/学分】: 59/3.5 实验总学时: 8【先修课程】:C/C+语言程序设计离散数学【适用专业】:计算机科学与技术、信息管理【开课院系】:信息技术学院、数统学院【教材、教学参考书】:1. 严蔚民,吴伟民编著。数据结构。清华大学出版社,2002.7。2. 严蔚民,吴伟民编著。数据结构习题。清华大学出版社,2002.7。3. 徐孝凯 编著。 数据结构实用教程。清华大学出版社,2002.7一、本课程实验的性质和任务通过上机实验,要求在数据结构的逻辑特性和物理表示,数据结构的选择和应用,算法

2、设计及其实现等方面加深对课程基本内容的理解,同时在程序设计方法以及上机操作等基本技能方面受到比较系统的和严格的训练,能够灵活利用基本算法解决一些实际问题。二、实验内容和基本要求实验项目的设置及学时分配表序号实验项目学时实验性质实验者类别每组人数备注1抽象数据类型2设计本科生1选作*2线性表的操作及应用2设计本科生1必作3栈和队列的基本操作2设计本科生1必作4迷宫问题求解2设计本科生1选作*5广义表的基本操作2设计本科生1选作*6树的各种操作2设计本科生1必作7哈夫曼树的建立2设计本科生1选作*8图的各种操作2设计本科生1必作9最小生成树的建立2设计本科生1选作*10排序和查找的算法2设计本科生

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

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

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

6、e 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; return 1; int SUBSTRACT(cmptp z1,cmptp z2,cmptp &difference) difference.real=z1.real-z2.real; difference.image=z1.image-z2.image; return 1; int multiply(

7、cmptp 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; return 1; 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=

8、3,4; coutgetreal(z1)endl; cmptp z2=5,6; cmptp sum; add(z1,z2,sum); coutsum.real sum.imageendl; SUBSTRACT(z1,z2,sum); coutsum.real sum.imageendl; multiply(z1,z2,sum); coutsum.real sum.imageendl; 3 实验要求按要求编写实验程序,将实验程序上机调试运行,并提交实验报告。实验2 线性表的基本操作1实验目的(1) 熟练掌握线性表的逻辑特征。(2)熟练掌握线性表的基本操作在两种存储结构上的实现。2实验内容(1)

9、设计一个顺序表的基本操作的演示程序(2) 设计一个单链表的基本操作的演示程序(3) 设计一个双链表的基本操作的演示程序【基本要求】实现下列4种基本运算:(1)初始化线性表;(2)在第I个元素前插入一个元素e;(3)删除第I个元素;(4)遍历线性表;(5)将单链表逆置【测试数据】自定参考程序如下:/顺序表的基本操作#include /顺序表的定义#define MAX 15typedef struct int elemMAX; int length;Sqlist;void Initlist_sq(Sqlist &L);void ListInsert_sq(Sqlist &L,int i, int

10、 e);void ListDel_sq(Sqlist &L,int i, int &e);void print_sq(Sqlist L);/ 函数的定义void Initlist_sq(Sqlist &L) L.length =0;void ListInsert_sq(Sqlist &L,int i, int e) int *p,*q; if(iL.length +1) return; q=&L.elemi-1; /插入位置 for(p=&L.elemL.length -1;p=q;-p ) *(p+1)=*p; *q=e; +L.length ; return;void ListDel_sq

11、(Sqlist &L,int i, int &e) if(iL.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;p=q;p+ ) cout*p ; coutn;void main() int a11=10,20,30,40,50,60,70,80,90,100; Sqlist L; /初始化顺序表 Initlist_sq(L); cout

12、现在的表长: L.length endl; / 插入10个数据元素 for( int i=1;i=10;+i) ListInsert_sq(L, i, ai-1); cout插入10个元素后的线性表:endl; /遍历 print_sq( L); cout现在的表长: L.length endl; /删除第5个元素 int x; ListDel_sq(L,5, x); cout删除的元素值是:xendl; cout删除第5个元素后的表:endl; print_sq( L); cout现在的表长: L.length endl;/ 单链表的操作#include struct NODE int da

13、ta; NODE *next; ;void print(NODE *&head); /遍历int data6=25,41,17,98,5,6;void Setup_L(NODE *&head,int n); /生成单链表void Insert_L(NODE *&head, int I, int e); /插入void Delete_L(NODE * &head, int I,int &e); /删除void Convert_L(NODE *&head); /逆序void main() NODE *L; Setup_L(L,6); print(L); /Insert_L(L,7,50); pri

14、nt(L); int x; Delete_L(L,0,x); coutX=xnext ; while(p) coutdatanext; /后移指针 coutnext=NULL; /先建立一个带头结点的单链表 q=head; for(int i=0;idata=datai; q-next=p; q=p; /插入到表头 q-next =NULL;void Insert_L(NODE *&L,int i, int e) NODE *p=L,*q; int j=0; while(p&jnext ; j+; if(!p|ji-1) cout插入值超出范围!data=e; q-next =p-next ;

15、 p-next =q;void Delete_L(NODE *&L,int i,int &e) NODE *p=L,*q; int j=0; while(p&jnext ; j+; if(!p|ji-1) cout删除值超出范围!next ; e=q-data ; p-next =q-next; delete q;void Convert_L(NODE *&L) NODE *p,*q,*r; p=L-next; q=p-next ; p-next =NULL; while(q) r=q-next; q-next =p; L-next=q; p=q; q=r; /双链表的基本操作struct N

16、ODE int data; NODE *next; NODE *prior;int data6=3,5,7,19,20,21; /测试用数据/ 函数声明void print(NODE *&head);void Setup_L(NODE*&head,int n);void Insert_L(NODE *&L,int i,int e);void Delete_L(NODE *&L,int i,int &e);void Convert_L(NODE*&L);/ 主函数和各函数的定义void main() NODE *L; Setup_L(L,6); print(L); Insert_L(L,7,50

17、); print (L); int x; Delete_L(L,1,x); coutX=xnext; while(p) coutdatanext; coutnext=NULL; q=head; for(int i=0;idata=datai; /cinp-data; p-prior=q;q-next=p;q=p; q-next=NULL; /return(head);void Insert_L(NODE *&L,int i,int e)/在带头结点的双链表中第i个位置插入元素e NODE*p=L,*q; int j=0; /j为计数器 while(p&jnext; j+; /寻找第i-1个结点

18、 if(!p|ji-1) /i小于1或大于表长 cout插入值超出范围!data=e; if(p-next=NULL) q-next=p-next;p-prior=q;p-next=q; else q-next=p-next;p-next-prior=q;p-next=q;q-prior=p; /插入L中void Delete_L(NODE*&L,int i,int &e)/在带头结点的双链表L中,删除第i个元素,并由e返回其值 NODE *p=L,*q; int j=0; while(p&jnext; j+; if(!p|ji-1) cout删除值超出范围!next; e=q-data; q

19、-next-prior=p; p-next=q-next; delete q;/删除并释放结点3 实验要求按要求编写实验程序,将实验程序上机调试运行,并提交实验报告。实验3 栈和队列的基本操作1实验目的(1) 深入了解栈和队列的基本特性(2) 熟练掌握栈的基本操作在两种存储结构上的实现。(3) 熟练掌握循环队列的基本操作(4) 熟练掌握链队列的基本操作2实验内容(1) 设计一个顺序栈的基本操作的演示程序(2) 设计一个链栈的基本操作的演示程序(3) 设计一个循环队列的基本操作的演示程序(4) 设计一个链队列的基本操作的演示程序【基本要求】实现下列6种基本运算:(1)初始化;(2)入栈(队列);

20、(3)出栈(队列);(4)遍历;(5)求栈(队列)的长度【测试数据】自定参考程序如下:/顺序栈的基本操作#include #define MAX 10typedef struct int base; int top; int stMAX; SqStack; /基本操作说明 void InitStack(SqStack &S); void push(SqStack &S, int e); void pop(SqStack &S,int &e); /基操作的算法描述void InitStack(SqStack &S) S.base=S.top=0;void push(SqStack &S, int

21、 e) if(S.top=MAX) cout”栈满n”; return; S.stS.top =e; S.top+=1; void pop(SqStack &S,int &e) if(S.top =0) cout”栈空n”; return; S.top -=1; e=S.stS.top ; void print(SqStack S) cout”栈的各个元素如下:n”; for(int I=0;IS.top ;I+) coutS.stI” “; coutendl; void main() SqStack S; /初始化 cout”初始化栈n”;InitStack(S); cout”栈底和栈顶:”

22、S.base”,”S.topendl; /入栈 cout”5个元素入栈n”; for(int I=0;I5;I+) push(S, 2*I+1); cout”栈顶为:”S.top endl; print(S); /出栈 int x; pop(S,x); cout”出栈元素为:”x”栈顶”S.topendl; print(S); /循环队列的基本操作#include #define MAX 8 typedef struct int baseMAX; int front; int rear; SqQueue;/* 初始化 */void InitQueue(SqQueue &Q) Q.front=Q

23、.rear=0;/*求队列长度*/int QueueLength(SqQueue Q) return (Q.rear-Q.front+MAX)%MAX; /*入队列*/void EnQueue(SqQueue &Q,int e) if(Q.rear+1)%MAX=Q.front) cout”队列满!”endl; 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; else k=1; switch(k) case 0: for

24、(I=Q.front;IQ.rear;I+) coutQ.baseI” “; break; case 1: for(I=Q.front;IMAX;I+) coutQ.baseI” “; for(I=0;IQ.rear ;I+) coutQ.baseI” “;break; /*出队*/int DeQueue(SqQueue &Q,int &e) if (Q.rear=Q.front) return 1; e=Q.baseQ.front; Q.front=(Q.front+1)%MAX; return 1;void main() SqQueue Q; InitQueue(Q); int j,m,x; for(j=0;j7;j+) EnQueue(Q,2*j); traverse(Q);m=QueueLength(Q);cout”n长度”mendl;EnQueue(Q,500); traverse(Q);DeQueue(Q,x);m=QueueLength(Q);cout”n长度”mendl;

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

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