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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验指导书网络工程10.docx

1、数据结构实验指导书网络工程10数据结构课程实验指导书适用于网络工程10级指导教师:向华政实验一 线性表的顺序存储结构一、 实验类型:设计性二、 实验目的与任务: 掌握顺序存储结构的特点,掌握动态顺序存储结构的常见算法。三、预习要求:熟悉C语言中数组的使用,以及动态内存申请与消毁方法四、实验基本原理:四、实验内容: 1输入一组整型元素序列,建立顺序表。2实现该顺序表的遍历。判断该顺序表中元素是否对称,对称返回1,否则返回0。3实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 4编写一个主函数,调试上述算法。三、实验要求:1. 根据实验内容编程,上机调试、得出正确的运行程序。2.

2、写出实验报告(包括源程序和运行结果)。四、实验学时:2学时五、实验步骤:1进入编程环境,建立一新文件; 2.存储定义 struct SqList int * elem; /动态线性表 int length; /表的实际长度 int listsize;3. 编译运行程序,观察运行情况和输出结果。4. 参考实验程序,以下几个函数实现了顺序表的创建以及插入和销毁,要求同学们能在此基础上完善其它函数并完成其它实验内容/创建顺序表void InitSqlist(SqList &sl) sl.elem = (int*)malloc(100*sizeof(int); sl.length = 0; sl.li

3、stsize = 100; return;/将元素e插入第i个位置void InsertSqlist(SqList &sl, int e, int i) if(isl.listsize) printf(插入位置超过限制!); return; /表满,重新分配内存 if(sl.length = sl.listsize) sl.elem = (int *)realloc(sl.elem, (sl.listsize+10)*sizeof(int); sl.listsize = sl.listsize+10; sl.elemi = e; /表不满,直接插入 if(sl.lengthsl.length)

4、 sl.elemi = e; if(i=i; k-) sl.elemk+1=sl.elemk; sl.elemi = e; return;/销毁顺序表void FreeSqlist(SqList &sl) free(sl.elem); 实验二 链式存储结构(一)-单向链表的有关操作(设计性)一、 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法。二、实验内容: 1随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2遍历单向链表。 3把单向链表中元素逆置(不允许申请新的结点空间)。 4在主函数中调试上述算法。 三、实验要求:1. 根据实验内容编程,上机调

5、试、得出正确的运行程序。2. 写出实验报告(包括源程序和运行结果)。四、实验学时:2学时五、实验步骤:1进入编程环境,建立一新文件;2类型定义 typedef struct LNode int data; struct LNode *next; LNode,*LinkList;3为了算法实现简单,最好采用带头结点的单向链表。4. 编译运行程序,观察运行情况和输出结果。六、选作实验建立一个有序单向链表。并在有序链表中插入一个元素使链表元素仍有序。 七、部分参考源代码struct Node int data; Node* next;void CreateList(Node &list, int n

6、) int k; Node *l; l = &list; for(int i=1; idata = k; p-next = l-next; l-next = p; void printlist(Node list) Node *l=&list; l = l-next; while(l) printf(%dn,l-data); l = l-next; /将单链表进行就地逆置/*读取一个接点,按前插法插入到链表 */void InverseSingleList(Node &List) Node *p,*q; q = &List; p = q-next; while(p) /保存p的下一个接点 q

7、= p-next; /将p插入到链表的头部 p-next = List.next; List.next = p; p = q; 实验三 栈和队列(设计性)一、 实验目的:1掌握栈、队列的思想及其存储实现。 2掌握栈、队列的常见算法的程序实现。二、实验内容: 1采用链式存储实现栈的初始化、入栈、出栈操作。 2采用顺序存储实现栈的初始化、入栈、出栈操作。 3采用链式存储实现队列的初始化、入队、出队操作。 4在主函数中设计一个简单的菜单,分别测试上述算法。 三、实验要求:1. 根据实验内容编程,上机调试、得出正确的运行程序。2. 写出实验报告(包括源程序和运行结果)。四、实验学时:2学时五、实验步骤

8、:3进入编程环境,建立一新文件;2类型定义 顺序栈:#define MAX 100 /栈的最大值typedefstruct int *base;int top;SqStack; 链栈: struct Lstack int data; Lstack *next; 顺序队列:#define MAX 100 /队列的最大长度typedefstruct int *base;int front,rear;SqQueue; 3. 编译运行程序,观察运行情况和输出结果。六、选作实验1. 实现循环队列的建立、出队、入队操作。2. 编写程序判断读入的字符系列是否为“回文”(正读和反读都相同的字符系列)。要求:同

9、时用栈和队列,将输入的元素分别进栈和进队列,然后退栈和出队,若两者出来的顺序相同则是“回文”。七、部分参考源代码/队列typedef struct QNode int data; struct QNode *next;QNode, *QueuePtr;typedef struct QueuePtr front; QueuePtr rear;LinkQueue;int InitQueue(LinkQueue &Q) /申请一个节点空间,然后将队头队尾指针指向它 QueuePtr p=(QueuePtr)malloc(sizeof(QNode); if(!p) return 0; Q.front

10、= p; Q.rear = p; Q.front-next = NULL; return 1;int CreateQueue(LinkQueue &Q, int n) int i; QueuePtr s; if(!Q.front) return 0; for( i=1; idata); /插入队列,由于先进先出,所以只能插入到队尾 Q.rear-next=s; s-next = NULL; Q.rear = s; return 1;/出队,并将出对的元素放到e中int DeQueue(LinkQueue &Q, int &e) if(Q.front = Q.rear) return 0; /取

11、出队头指针的数据 QueuePtr p =Q.front-next; e = p-data; Q.front = Q.front -next; if(Q.rear = p) Q.rear = Q.front; free(p);int PrintQueue(LinkQueue Q) QueuePtr p=Q.front-next; while(p) printf( %d n,p-data); p = p-next; return 1;实验四 二叉树的操作(综合性)一、 实验目的: 1掌握二叉树的存储实现。 2掌握二叉树的遍历思想。 3掌握二叉树的常见算法的程序实现。二、实验内容:1. 输入完全二

12、叉树的先序序列,用#代表虚结点(空指针),如ABD#CE#F#建立二叉树,实现先序、中序和后序以及按层次遍历序列。2. 求所有叶子及结点总数。 二、 实验要求: 1. 根据实验内容编程,上机调试、得出正确的运行程序。2. 写出实验报告(包括源程序和运行结果)。四、实验学时:4学时五、实验步骤: 1进入编程环境,建立一新文件;2. 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作;3. 求所有叶子及结点总数的操作;4. 编译运行程序,观察运行情况和输出结果。 六、选作实验给定权值5,29,7,8,14,23,3,11,建立哈夫曼树,输出哈夫曼编码。 七、部分参考

13、源代码 typedef struct Node char data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;/按先序序列建立二叉树void CreateBiTree1(BiTree &bt) char ch; scanf(%c,&ch); getchar(); if(ch= ) bt=NULL; printf(不产生子树!); else bt = (BiTree)malloc(sizeof(Node); bt-data = ch; printf(产生左子树!); CreateBiTree1(bt-LChild); p

14、rintf(产生右子树!); CreateBiTree1(bt-RChild); return;void Visit(char ch) printf(%c ,ch);/*先序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/void PreOrder(BiTree root) if (root!=NULL) Visit(root -data); /*访问根结点*/ PreOrder(root -LChild); /*先序遍历左子树*/ PreOrder(root -RChild); /*先序遍历右子树*/ /*中序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/v

15、oid InOrder(BiTree root) if (root!=NULL) InOrder(root -LChild); /*中序遍历左子树*/ Visit(root -data); /*访问根结点*/ InOrder(root -RChild); /*中序遍历右子树*/ /* 后序遍历二叉树,root为指向二叉树(或某一子树)根结点的指针*/void PostOrder(BiTree root) if(root!=NULL) PostOrder(root -LChild); /*后序遍历左子树*/ PostOrder(root -RChild); /*后序遍历右子树*/ Visit(r

16、oot -data); /*访问根结点*/ void zhonginorder(BiTree root) /* 中序遍历二叉树,root为二叉树的根结点 */ int top=0; BiTree p; BiTree s30; int m; m = 29; p = root; do while(p!=NULL) if (topm) return; top=top+1; stop=p; p=p-LChild; ; /* 遍历左子树 */ if(top!=0) p=stop; top=top-1; Visit(p-data); /* 访问根结点 */ p=p-RChild; /* 遍历右子树 */

17、while(p!=NULL | top!=0);实验五 图的遍历操作(设计性)一、 实验目的:掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS、BFS的基本思想及对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。二、实验内容:设计一个有向图和一个无向图,用邻接矩阵作为存储结构,完成有向图和无向图的DFS(深度优先遍历)和BFS(广度优先遍历)的操作。三、实验要求:1. 根据实验内容编程,画出你所设计的图,写出两种方法的遍历序列。2. 上机调试、得出正确的运行程序。3. 写出实验报告(包括源程序和运行结果)。四、实验学时:2学时五、实验步骤: 1进入编程环境

18、,建立一新文件;2. 采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作;3. 编译运行程序,观察运行情况和输出结果。七、部分参考源代码#define MAX_VERTEX_NUM 20/有向图的十字链表存储表示/定义弧信息typedef struct ArcBox int tailvex, headvex; /该弧的尾顶点和头顶点的位置; struct ArcBox *hlink, *tlink; /弧头相同和弧尾相同的链域 /InfoType * info;ArcBox;/定义顶点信息typedef struct VexNode int data; /存顶点有关

19、信息 struct ArcBox *firstin;/指向以该顶点为弧头的第一个弧结点 struct ArcBox *firstout; /指向以该顶点为弧尾的第一个弧结点DD;/定义图的结构typedef struct DD xlistMAX_VERTEX_NUM; /表头向量, 顶点向量 int vexnum,arcnum; /顶点数目和弧的数目OLGraph;/输入n个顶点的信息和e条弧的信息,建立该有向图的十字链表int CreateDG(OLGraph &G) /输入顶点的数目,弧的数目 printf(请输入顶点的数目和弧的数目n); scanf(%d %d,&G.vexnum,&G

20、.arcnum); /构造表头向量 printf(请输入各个顶点的数据n); for(int i=0; iG.vexnum; i+) scanf(%d,&G.xlisti.data); G.xlisti.firstin = NULL; /初始化指向弧的指针 G.xlisti.firstout = NULL; /输入各弧并构造十字链表 int ArcStart,ArcEnd; for(i=0; iheadvex = ArcEnd; p-tailvex = ArcStart; p-hlink = G.xlistArcEnd.firstin; /弧头相同的链域 p-tlink = G.xlistAr

21、cStart.firstout; /弧尾相同的链域 G.xlistArcEnd.firstin = G.xlistArcStart.firstout = p; /两个顶点的相应链域指针位置后移 return 1;int visitedMAX_VERTEX_NUM;void DFS(OLGraph g, int v) visitedv = 1; int k; printf( %d ,v); ArcBox* arc = g.xlistv.firstout; while(arc) k = arc-headvex; if(!visitedk) DFS(g,k); arc = g.xlistk.firs

22、tout; if(visitedarc-headvex) break; /for()void DFSTraverse(OLGraph g) for(int i=0; ig.vexnum; i+) visitedi=0; for(i=0; indi.key) & (ib) printf(nNot found); return(0); j=ndi.link; while( (jn) & (k!=rj.key) & (rj.key=ndi.key) ) j+; if(k!=rj.key) j=0; printf(nNot found); return(j);/折半查找int binsrch(JD r

23、,int n,int k) int low,high,mid,found; low=1; high=n; found=0; while( (lowrmid.key) low=mid+1; else if(k=rmid.key) found=1; else high=mid-1; if(found=1) return(mid); else return(0);/顺序查找int seqsrch(JD r,int n,int k) int i=n; r0.key=k; while(ri.key!= k ) i-; return(i);实验七 排序(设计性)一、 实验目的:掌握各种排序方法的基本思想、

24、排序过程、算法实现,能进行时间和空间性能的分析,根据实际问题的特点和要求选择合适的排序方法。二、实验内容:1. 实现直接排序、冒泡、直接选择、快速排序算法。2 任意输入关键字序列,采用不同的排序方法进行排序。三、实验要求:1. 根据实验内容编程;2. 比较各种算法的运行速度。(计算各种算法的速度,要用到头文件time.h中的time()和difftime()两个函数#includetime_t t1,t2;double tt1;t1=time(NULL);t2=time(NULL);tt1=difftime(t2,t1) /tt1记录两次截取的系统时间之差3.上机调试、得出正确的运行程序。4.写出实验报告(包括源程序和运行结果)。四、实验学时:2学时五、实验步骤:1进入编程环境,建立一新文件; 2. 编译运行程序,观察运行情况和输出结果。六、选作实验设计一个程序,任意给出n个学生信息(包括:学号,姓名,成绩等),实现按照分数高低打印出学生的考试名次、学号、姓名和成绩,同一名次的学生按照学号有

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

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