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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

本数据结构实验教案.docx

1、本数据结构实验教案数据结构实验教案授课教师:许四平适用专业:信息与计算科学使用班级:13信计1、2 授课时间:20XX年秋季授课学时:14学时使用教材:数据结构 严蔚敏 主编实验指导书:数据结构实验指导书,数理学院编,20XX年版湖北理工学院数理学院实 验 安 排 表周次日期实验课题学时实验报告次数33.23线性表的顺序存储2133.26线性表的顺序存储2154.4单链表2154.9单链表2174.20栈、队列3174.23栈、队列3184.27树与二叉树2184.29树与二叉树2195.10树与二叉树2195.10树与二叉树21146.9查找31146.10查找31数据结构设计性实验项目1.

2、 线性表的合并:已知线性表La和Lb的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。分别采用顺序存储结构和链式结构来实现。2. 线性表的逆置:设有一个线性表(e0, e1, , en-2, en-1),请编写一个函数将这个线性表原地逆置,即将线性表内容置换为(en-1, en-2, , e1, e0)。线性表中的数据可以为整数、字符或字符串,试分别采用顺序存储结构和链式结构来实现。3. 约瑟夫环的实现:设有n个人围坐一圈,用整数序列1, 2, 3, , n表示顺序围坐在圆桌周围的人, 现从某个位置 s上的人开始报数,数到m的人出列,接着从出列的下一个人又从1

3、开始重新报数,数到m的人出列,如此下去,直到所有人都出列为此。试设计确定他们的出列次序序列的程序。如 n=8, m=4 ,s=1时, 设每个人的编号依次为 1,2,3,开始报数,则得到的出列次序为4,8,5,2,1,3,7,6。检查程序的正确性和健壮性。(1)采用数组表示作为求解过程中使用的数据结构。(2) 采用单向循环链表作为存储结构模拟整个过程,循环链表可不设头节点,必须注意空表和非空表的界限。4. 数制转换: 利用顺序栈和链栈实现数制转换5. 二叉树的遍历:分别以顺序存储结构和二叉链表作存储结构,试编写前序、中序、后序及层次顺序遍历二叉树的算法。6. 赫夫曼树与赫夫曼编码:已知某系统在通

4、信联络中只可能出现8种字符a,b,c,d,e,f,g,h,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计Huffman编码,并计算其平均码长。(1) 初始化:从键盘读入8个字符,以及它们的权值,建立Huffman树。(2)编码:根据建立的Huffman树,求每个字符的Huffman编码。对给定的待编码字符序列进行编码。(3) 译码:利用已经建立好的Huffman树,对上面的编码结果译码。译码的过程是分解电文中的字符串,从根结点出发,按字符0和1确定找左孩子或右孩子,直至叶结点,便求得该子串相应的字符。(4) 打印Huffman树。7. 学生成

5、绩管理查询系统:每个学生的数据信息有准考证号(主关键字)、姓名、语文、英语、数学、和总分等数据项,所有学生的信息构成一个学生成绩表。假设准考证号的头两位表示地区编号。请设计一个管理系统达到如下基本要求:(1) 初始化:建立一个学生成绩表,输入准考证号、姓名、语文、英语、数学,然后计算每个学生的总分,存入相应的数据项;注意:分析数据对象和它们之间的关系,并以合适的方式进行组织(可选择无序的顺序表、有序的顺序表或索引顺序表来进行存储表示);(2) 查找:综合应用基本查找算法完成数据的基本查询工作,并输出查询的结果;(3) 输出:有选择性地输出满足一定条件的数据记录,如输出地区编号为01,并且总分在

6、550分以上的学生的信息;(4) 计算:计算在等概率情况下该查找表的平均查找长度。8. 排序:编制程序让机器随机产生2000个整数,放入一个数组中;对此2000个随机数序列分别用冒泡排序、快速排序、希尔排序和堆排序方法进行排序,并比较它们的运行时间。注意:每三、四个同学组成一个小组。每个实验中的题目,可分别由不同的同学完成。其它题目可以相互交流,以利于互相提高。数据结构验证性实验项目实验一 线性表的顺序存储一、实验目的及要求1、掌握在TC环境下调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。二、实验学时2学时三、实验任务1、 生成一个顺序表并动

7、态地删除任意元素和在任意位置插入元素。2、 将两个有序表合并成一个有序表。四、实验重点、难点1、 在顺序表中移动元素。2、 在顺序表中找到正确的插入位置。五、操作要点 (一)顺序表基本操作的实现问题描述 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。基本要求 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。实现提示 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。程序实现#include #inclu

8、de typedef int DataType ;# define maxnum 20typedef structint datamaxnum;int length;SeqList;/*插入函数*/int insert(SeqList *L , int i , DataType x)/* 将新结点x插入到顺序表L第i个位置 */ int j ;if( i(*L).length +1) printf( n i 值不合法 ! ); return 0;if(* L).length =maxnum-1) printf( n 表满不能插入!); return 0; for(j=(*L).length;j

9、=i;j-) (*L).dataj+1=(*L).dataj;(*L).datai = x;(*L).length+;return 1;/*删除函数*/int delete( SeqList *L ,int i) /*从顺序L中删除第i个结点*/ int j ;if( i(*L).length ) printf( n 删除位置错误 ! ) ;return 0;for(j=i+1;j=(*L).length;j+)(*L).dataj-1 =(*L).dataj;(*L).length-;return 1;/*生成顺序表*/void creatlist(SeqList * L) int n ,

10、i , j ;printf(请输入顺序表 L 的数据个数:n) ;scanf(%d , &n) ;for(i=0 ; in ; i+) printf(data%d = , i) ; scanf(%d,&(*L).datai);(*L).length=n-1;printf(n) ;/*creatlist */*输出顺序表 L*/printout(SeqList * L) int i ;for (i=0 ; i=(* L).length ; i+) printf( data%d=, i) ; printf(%d, (*L).datai);/*printout */printf(n);main()

11、SeqList *L ;char cmd ;int i , t , x;clrscr() ;creatlist(L);doprintf(ni , I - 插入n) ;printf(d , D - 删除n) ;printf(q , Q - 退出n) ;docmd=getchar() ;while(cmd!=i)&(cmd!=I)&(cmd!=d)&(cmd!=D)&(cmd!=q)&(cmd!=Q);switch(cmd) case i: case I: printf(nPlease input the DATA: ); scanf(%d,&x) ; printf(nWhere? ); scan

12、f(%d,&i) ; insert(L,i,x) ; printout(L); break ;case d:case D : printf(nWhere to Delete? ); scanf(%d,&i); delete(L,i);printout(L);break ;while(cmd!=q)&(cmd!=Q);(二)有序顺序表的合并问题描述 已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc基本要求 lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表程序实现#include#include# define OK 1# defi

13、ne ERROR 0/* 定义ElemType为int或别的自定义类型 */typedef int ElemType;/* 链式存储类型 */typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkList;/* 单链表的建立(头插法)*/void CreateList_L(LinkList &L,int n) /CreateList_L() function /To Creatre a LinkList L with HeadNode int i; LNode *p; L=(LinkList)malloc(sizeo

14、f(LNode); L-next=NULL; printf(Please input the data for LinkList Nodes: n); for(i=n;i0;-i) p=(LinkList)malloc(sizeof(LNode); scanf(%d,&p-data); /Reverse order inputing for Creating a LinkList p-next=L-next; L-next=p; /end of for if(n) printf(Success to Create a LinkList !n); else printf(A NULL LinkL

15、ist have been created !n);/end of CreateList() function void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) LinkList pa,pb,pc; pa=La-next;pb=Lb-next; Lc=pc=La; while(pa&pb) if(pa-datadata) pc-next=pa;pc=pa;pa=pa-next; else pc-next=pb;pc=pb;pb=pb-next; pc-next=pa?pa:pb; free(Lb);void main() Link

16、List La,Lb,Lc,p; int n; printf(请输入La的长度n:); scanf(%d,&n); CreateList_L(La,n); printf(输出La的内容:); p=La-next; while(p) printf(%d-,p-data); p=p-next; printf(n); printf(请输入Lb的长度n:); scanf(%d,&n); CreateList_L(Lb,n); printf(输出Lb的内容:); p=Lb-next; while(p) printf(%d-,p-data); p=p-next; printf(n); MergeList_

17、L(La,Lb,Lc); printf(输出Lc的内容:); p=Lc-next; while(p) printf(%d-,p-data); p=p-next; printf(n);六、注意事项1、 删除元素或插入元素表的长度要变化。2、 在合并表中当某一个表到表尾了就不用比较了,直接将另一个表的元素复制到总表去即可。实验二 单链表一、实验目的及要求1、掌握用在TC环境下上机调试单链表的基本方法2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现3、进一步掌握循环单链表的插入、删除、查找算法的实现二、实验学时2学时三、实验任务1、在带头结点的单链表h中第i个数据元素之前插入一

18、个数据元素。2、将两个有序单链表合并成一个有序单链表。3、生成一个循环单链表。4、在循环单链表中删除一个节点。四、实验重点、难点1、 在单链表中寻找到第i-1个结点并用指针p指示。2、 比较两个单链表的节点数据大小。3、循环单链表中只有一个节点的判断条件。4、在循环单链表中删除一个节点。五、操作要点(一)单链表基本操作的实现1、实现栈的顺序存储和链式存储。#include#include# define STACK_INIT_SIZE 100# define STACKINCREMENT 10# define MAXQSIZE 100# define OK 1# define ERROR 0/

19、* 定义SElemType为int或别的自定义类型 */typedef int SElemType;/*链式栈的存储类型*/typedef struct SNode SElemType data; struct SNode *next;SNode,*LinkStack;/*取链式栈顶元素*/int GeTop_L(LinkStack top,SElemType &e) if(!top-next) printf(Error!Its an empty LinkStack!n); return (ERROR); else e=top-next-data; return (OK); /*将元素压入链式

20、栈*/int Push_(LinkStack top,SElemType &e) SNode *q; q=(LinkStack)malloc(sizeof(SNode); q-data=e; q-next=top-next; top-next=q; return(OK);/*将元素弹出链式栈*/int Pop_L(LinkStack top,SElemType &e) SNode *q; e=top-next-data; q=top-next; top-next=q-next; free(q); return(OK);/* 定义SElemType为int或别的自定义类型 */typedef i

21、nt SElemType;/* 顺序栈的存储类型 */typedef struct /define structure SqStack() SElemType *base; SElemType *top; int stacksize;SqStack;/*构造空顺序栈*/int InitStack(SqStack &S) /InitStack() sub-function S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base) printf(Allocate space failure !n);return

22、 (ERROR); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return (OK); /InitStack() end/*取顺序栈顶元素*/int GetTop(SqStack S,SElemType &e) /GetTop() sub-function if(S.top=S.base) printf(Its a empty SqStack !n); /if empty SqStack return (ERROR); e=*(S.top-1); return (OK); /GetTop() end/*将元素压入顺序栈*/int Push(SqSta

23、ck &S,SElemType e) /Push() sub-function *S.top+=e; return (OK); /Push() end/* 将元素弹出顺序栈*/int Pop(SqStack &S,SElemType &e) /Pop() sub-function e=*-S.top; return (OK); /Pop() end void main()int i,j;SqStack s;LinkStack s1;SElemType e;InitStack(s);s1=(LinkStack)malloc(sizeof(SNode);s1 - next = NULL;print

24、f(顺序栈的元素:n);for(i=1;i=8;i+)scanf(%d,&e);Push(s,e);printf(顺序栈出栈:n);for(i=1;i=8;i+) Pop(s,e); printf(%d ,e);printf(n);printf(链式栈的元素:n);for(j = 1;j next)Pop_L(s1,e);printf(%d ,e);printf(n);2、利用顺序栈或链栈实现数制转换。#include#include# define STACK_INIT_SIZE 100# define STACKINCREMENT 10# define MAXQSIZE 100# defi

25、ne OK 1# define ERROR 0 /* 定义SElemType为int或别的自定义类型 */typedef int SElemType;/* 顺序栈的存储类型 */typedef struct /define structure SqStack() SElemType *base; SElemType *top; int stacksize;SqStack; /*构造空顺序栈*/int InitStack(SqStack &S) /InitStack() sub-function S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(

26、SElemType);if(!S.base) printf(Allocate space failure !n);return (ERROR); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return (OK); /InitStack() endint StackEmpty(SqStack S) if(S.top=S.base) return OK; else return ERROR;/*取顺序栈顶元素*/int GetTop(SqStack S,SElemType &e) /GetTop() sub-function if(S.top=S.bas

27、e) printf(Its a empty SqStack !n); /if empty SqStack return (ERROR); e=*(S.top-1); return (OK); /GetTop() end/*将元素压入顺序栈*/int Push(SqStack &S,SElemType e) /Push() sub-function *S.top+=e; return (OK); /Push() end/* 将元素弹出顺序栈*/int Pop(SqStack &S,SElemType &e) /Pop() sub-function e=*-S.top; return (OK); /Pop() end/*利用顺序栈实现对于输入的任意一个非负十进制整数,输出与其等值的八进制数。*/void Conversion() SqStack S; SElemType N,e; InitStack(S);

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

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