收藏 分享(赏)

数据结构实验指导书(2016.03.11).doc

上传人:精品资料 文档编号:10493352 上传时间:2019-11-22 格式:DOC 页数:56 大小:207.50KB
下载 相关 举报
数据结构实验指导书(2016.03.11).doc_第1页
第1页 / 共56页
数据结构实验指导书(2016.03.11).doc_第2页
第2页 / 共56页
数据结构实验指导书(2016.03.11).doc_第3页
第3页 / 共56页
数据结构实验指导书(2016.03.11).doc_第4页
第4页 / 共56页
数据结构实验指导书(2016.03.11).doc_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、数据结构实验指导书郑州轻工业学院2016.02.20目录前言 .3实验 01 顺序表的基本操作 .7实验 02 单链表的基本操作 19实验 03 栈的基本操作 32实验 04 队列的基本操作 35实验 05 二叉树的基本操作 38实验 06 哈夫曼编码 40实验 07 图的两种存储和遍历 42实验 08 最小生成树、拓扑排序和最短路径 46实验 09 二叉排序树的基本操作 48实验 10 哈希表的生成 50实验 11 常用的内部排序算法 52附:实验报告模板 54前言数据结构是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多

2、高校考研专业课之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生

3、的数据抽象能力和程序设计能力。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好数据结构的关键。为了更好地配合学生实验,特编写实验指导书。一、实验目的本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念和常用的几种数据结构在计算机中的存储和实现的方法,加强学生动手能力;另一方面培养学生从实际问题中抽象出对应的抽象数据类型,进而找到合适的计算机存储方法和算法,为以后课程的学习、大型软件的开发、实际工程问题打下良好的软件开发基础。二、实验要求1、每次实验前学生必须根据实验内容认真准备实验程序及调试时所需的

4、输入数据。2、在指导教师的帮助下能够完成实验内容,得出正确的实验结果。3、实验结束后总结实验内容、书写实验报告。4、遵守实验室规章制度、不缺席、按时上、下机。5、实验学时内必须做数据结构的有关内容,不允许上网聊天或玩游戏,如发现上述现象,取消本次上机资格,平时成绩扣 10 分。6、实验报告有一次不合格,扣 5 分,两次以上不合格者,平时成绩以零分记。三、实验环境 VC+6.0 或其他 C+相关的编译环境。四、说明1、本实验的所有算法中元素类型应根据实际需要合理选择。2、实验题目中带者为较高要求,学生可自选;其余部分为基本内容,应尽量完成(至少完成 70%,否则实验不合格) 。3、数据结构是很多

5、高校的硕士研究生入学考试的专业课之一,希望有志于考研的学生能够在学习过程中注意各种算法的理解,以便为考研做一定的准备。4、好的算法决定了好的程序,要有效地实现算法,就需要设计能够有效表达和简化算法的数据结构,因此数据结构是有效进行程序设计的基础,是每个程序员的必修课。五、实验报告的书写要求1、明确实验的目的及要求。2、记录实验的输入数据和输出结果。3、说明实验中出现的问题和解决过程。4、写出实验的体会和实验过程中没能解决的问题。5、实验程序请构建为多文件程序,每一个算法对应的函数原型声明存放在头文件*.h 中,对应的函数实现存放在源文件*.c 中;main()函数存放在另一个源文件中,该文件包

6、含头文件*.h 即可。六、成绩考评办法1、期末考试占 70 分,闭卷。2、平时考评占 30 分。其中实验环节占 20 分(实验准备、上机、报告、验收等) ;平时占 10分(出勤、作业、测验等) 。七、参考书目1、 数据结构 (语言版) 严蔚敏等 清华大学出版社 2、 数据结构题集 (C 语言版) 严蔚敏等 清华大学出版社 3、 数据结构与算法分析C 语言描述 ,Mark Allen Weiss 著,机械工业出版社,2012实验 01 顺序表的基本操作实验学时:2 学时实验类型:上机背景知识:顺序表的插入、删除及应用。目的要求:1掌握顺序存储结构的特点。2掌握顺序存储结构的常见算法。实验内容:编

7、写一个完整的程序,实现顺序表的生成、插入、删除、输出等基本运算。(1 ) 建立一个顺序表,含有 n 个数据元素。(2 ) 输出顺序表。(3 ) 在顺序表中删除值为 x 的结点或者删除给定位置 i 的结点。(4 ) 实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。(5 ) 输入整型元素序列,利用有序表插入算法建立一个有序表。(6) *利用算法 5 建立两个非递减有序表 A 和 B,并把它们合并成一个非递减有序表 C。(7 ) 在主函数中设计一个简单的菜单,分别测试上述算法。(8 ) *综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等) 。实验说明:

8、1请构建多文件程序,算法 1 至算法 6 对应的函数原型声明存放在头文件 SqList.h 中,对应的函数实现存放在源文件 SqList.c 中;main()函数存放在另一个源文件中,该文件包含头文件SqList.h 即可。2类型定义#define MAXSIZE 100 /表中元素的最大个数typedef int ElemType; /元素类型typedef struct ElemType *elem; /线性表int length; /表的实际长度int listsize; /当前分配的存储容量SqList; /顺序表的类型名3建立顺序表时可利用随机函数自动产生数据。注意问题:1、 插入、

9、删除时元素的移动原因、方向及先后顺序。2、 理解函数形参与实参的传递关系。部分源代码:DS.h#include #include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef int Status;SqList.h#ifndef SQLIST_H_INCLUDED#define SQLIST_H_INCLUDED#include “DS.h“typedef int ElemType;typedef structElemType *elem;int length;int list

10、size;SqList;void menu();Status InitList_Sq(SqList /*初始化顺序表*/Status CreateList_Sq(SqList /*建立顺序表*/void PrintList_Sq(SqList L);/*输出顺序表*/Status DeleteList_Sq(SqList /*删除第 i 个元素*/Status DeleteListX_Sq(SqList /*删除值为 x 的元素*/Status AdjustList_Sq(SqList /*奇数排在偶数之前*/Status OrderList_sq(SqList /*插入法生成递增有序表 */

11、void MergeList_Sq(SqList La, SqList Lb, SqList /*两个非递减有序表 A 和 B,并把它们合并成一个非递减有序表 C*/#endif / SQLIST_H_INCLUDEDSqList.cpp#include “SqList.h“void menu()printf(“ttt 顺序表基本操作nn“);printf(“ttt1.建 立 顺 序 表n“);printf(“ttt2.遍 历 顺 序 表n“);printf(“ttt3.删 除 第 i 个 元 素n“);printf(“ttt4.删 除 值 为 x 的 元 素n“);printf(“ttt5.

12、奇 数 排 在 偶 数 之 前n“);printf(“ttt6.插 入 法 生 成 递 增 有 序 表n“);printf(“ttt7.两个非递减有序表 La 和 Lb 合并成非递减有序表 Lcn“);printf(“ttt0.退 出nn“);/*初始化顺序表*/Status InitList_Sq(SqList if(!L.elem) exit(OVERFLOW);L.length=0;L.listsize=n;return OK;/*建立顺序表*/Status CreateList_Sq(SqList printf(“请输入顺序表长度:“);scanf(“%d“, if(InitList_

13、Sq(L, n)printf(“请输入%d 个元素:“, n);for(i = 0; i L.length) ) return ERROR;p = e = *p;q = L.elem+L.length-1;for(+p; p #include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef int Status;LinkList.h#include “DS.h“typedef int Elemtype;typedef struct NodeElemtype data;struct

14、 Node *next;Lnode,*LinkList;void menu(); /*菜单*/Status Init_Linklist(LinkList /*初始化空表*/Status Creat_Linklist(LinkList /*尾插法建立单链表*/void Disp_Linklist(LinkList L); /*单链表遍历*/int length_Linklist(LinkList L); /*计算单链表长度 */void Reverse_Linklist(LinkList L); /*单链表逆置*/void DelEven_Linklist(LinkList L); /*删除值为

15、偶数的结点 */Status Insert_Linklist(LinkList L, int x); /*在有序单链表 L 中插入元素 x,链表仍然有序*/Status CreatOrder_Linklist(LinkList /*创建非递减有序单链表*/void MergeDescend_Linklist(LinkList La, LinkList Lb, LinkList /*两个非递减有序单链表 La和 Lb 合并成一个非递增有序链表 Lc*/void MergeAscend_Linklist(LinkList La, LinkList Lb, LinkList /*两个非递减有序单链表

16、 La 和Lb 合并成一个非递减有序链表 Lc*/void Split_Linklist(LinkList La, LinkList /*链表 La 按值分解成两个链表,La 全部为奇数,Lb全部为偶数*/LinkList.cpp#include “LinkList.h“void menu()printf(“ttt 单链表基本操作nn“);printf(“ttt1.建 立 单 链 表n“);printf(“ttt2.遍 历 单 链 表n“);printf(“ttt3.计 算 链 表 长 度n“);printf(“ttt4.链 表 逆 置n“);printf(“ttt5.删 除 偶 数 节 点n

17、“);printf(“ttt6.生 成 值 有 序 单 链 表n“);printf(“ttt7.合 并 生 成 降 序 链 表n“);printf(“ttt8.合 并 生 成 升 序 链 表n“);printf(“ttt9.分 解 链 表n“);printf(“ttt0.退 出nn“);/*初始化空表*/Status Init_Linklist(LinkList if(!L) return ERROR;L-next=NULL;return OK;/*尾插法建立单链表*/Status Creat_Linklist(LinkList LinkList p,rear;Init_Linklist(L)

18、;rear = L;printf(“输入-1 表示输入结束n“);while(scanf(“%d“,if(!p) return ERROR;p-data = x;rear-next = p;rear = p;rear-next = NULL;return OK;/*单链表遍历*/void Disp_Linklist(LinkList L)LinkList p;p = L-next;while(p)printf(“%d “, p-data);p = p-next;printf(“n“);/*计算单链表长度*/int length_Linklist(LinkList L)int count = 0

19、; /*count 表示单链表长度*/LinkList p;return count;/*单链表逆置*/void Reverse_Linklist(LinkList L)LinkList p, q ;/*删除值为偶数的结点*/void DelEven_Linklist(LinkList L)LinkList p, q; /*在有序单链表中插入元素,链表仍然有序,插入成功返回 OK,插入失败返回 ERROR*/Status Insert_Linklist(LinkList L, int x);/*创建非递减有序单链表,创建成功返回 OK,创建失败返回 ERROR*/Status CreatOrd

20、er_Linklist(LinkList pa = La-next;pb = Lb-next;pc = Lc = La;while(pa pc = pa; pa = pa-next;elsepc-next = pb; pc = pb; pb = pb-next;pc-next = pa ? pa : pb;free(Lb);/*链表 La 按值分解成两个链表,La 全部为奇数,Lb 全部为偶数 */void Split_Linklist(LinkList La, LinkList LinkList L, La, Lb, Lc;while(1)menu();printf(“选择你的操作:“);s

21、canf(“%d“,switch(choice)case 1:if(Creat_Linklist(L)printf(“单链表创建成功n“);elseprintf(“单链表创建失败n“);break;case 2:Disp_Linklist(L);break;case 3:length = length_Linklist(L);printf(“单链表长度为:%dn“,length);break;case 4:Reverse_Linklist(L);printf(“逆置后的链表为:n“);Disp_Linklist(L);break;case 5:DelEven_Linklist(L);print

22、f(“新链表为:n“);Disp_Linklist(L);break;case 6:if(CreatOrder_Linklist(L)printf(“值有序链表为:n“);Disp_Linklist(L);elseprintf(“单链表创建失败n“);break;case 7:CreatOrder_Linklist(La);CreatOrder_Linklist(Lb);MergeDescend_Linklist(La, Lb, Lc);printf(“合并后的新链表为:n“);Disp_Linklist(Lc);break;case 8:CreatOrder_Linklist(La);CreatOrder_Linklist(Lb);MergeAscend_Linklist(La, Lb, Lc);printf(“合并后的新链表为:n“);Disp_Linklist(Lc);break;case 9:Creat_Linklist(L);Split_Linklist(L, Lb);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报