数据结构实验指导书(C版)
数据结构实验指导书
(C语言版)
2018年9月
1
目录
1、线性表的存储操作实现 ......................................................................................... 1
2、栈和队列的操作实现 ........................................................... 错误!未定义书签。
3、串/数组的操作实现 .............................................................. 错误!未定义书签。
4、排序算法实现 ....................................................................... 错误!未定义书签。
1
1、线性链表的存储操作实现
1. 实验目的
⑴掌握线性链表的存储结构;
⑵验证线性链表及其基本操作的实现;
⑶理解算法与程序的关系,能够将线性链表算法转换为对应的程序。
2. 实验内容
1.使用数据结构
typedefstruct node{
int age;
charstuName[10];
struct node *next;
}ListNode,*Listptr;
实现带头结点的单向链表的创建、删除链表、插入结点等操作,并能实现年龄递增的两个单向链表合并一个链表,合并后的链表按年龄递减,可认为同名同年龄是同一个学生,每个学生在合并后的链表中仅出现一次。最后打印输出合并后的链表元素,验证结果的正确性。
2.编程实现以上的功能并对程序逐行进行注释。
3.按照学校实验报告模板撰写实验报告。
3. 实验原理
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。链式存储方式即可以用于表示线性结构,也可用于表示非线性结构。一般来说,在线性表的链式存储结构中,各数据结点的存储符号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。
线性表的链接存储中,为了方便在表头插入和删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。
4. 实验程序 2
在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序链表结构体的定义,范例程序如下:
typedefstruct node{
int age;
charstuName[10];
struct node *next;
}ListNode,*Listptr;
文件包括顺序链表翻转、顺序链表插入、删除操作、合并操作、输出操作等,范例程序如下:
3
4
5
在定义了顺序链表的存储结构及基本操作后,可以在主函数中调用实现基本操作的函数来完成相应的功能。范例程序如下: 6
7 8
《数据结构》实验报告
苏州科技学院数据结构(C语言版)实验报告 专业班级 测绘1011 学 号 10201151 姓 名 XX 实习地点 C1 机房 指导教师 史守正 目 录封面………………………………………………………………………1目录………………………………………………………………………2实验一 线性表…………………………………………………………3一、程序设计的基本思想,原理和算法描述…………………………………3二、源程序及注释(打包上传)……………………………………………3三、运行输出结果………………………………………………………… 4四、调试和运行程序过程中产生的问题及采取的措施………………………6五、对算法的程序的讨论、分析,改进设想,其它经验教训…………………6实验二 栈和队列……………………………7一、程序设计的基本思想,原理和算法描述……………………………8二、源程序及注释(打包上传)……………………………8三、运行输出结果…………………………………………………………8四、调试和运行程序过程中产生的问题及采取的措施………………………10五、对算法的程序的讨论、分析,改进设想,其它经验教训………………10实验三 树和二叉树………………………………………………11一、程序设计的基本思想,原理和算法描述………………………………11二、源程序及注释(打包上传)……………………………………………12三、运行输出结果…………………………………………………………12四、调试和运行程序过程中产生的问题及采取的措施………………………12五、对算法的程序的讨论、分析,改进设想,其它经验教训………………12实验四 图…………………………………………………………13一、程序设计的基本思想,原理和算法描述………………………………13二、源程序及注释(打包上传)……………………………………………14三、运行输出结果…………………………………………………………14四、调试和运行程序过程中产生的问题及采取的措施………………………15五、对算法的程序的讨论、分析,改进设想,其它经验教训………………16实验五 查找…………………………………………………………17一、程序设计的基本思想,原理和算法描述………………………………17二、源程序及注释(打包上传)……………………………………………18三、运行输出结果…………………………………………………………18四、调试和运行程序过程中产生的问题及采取的措施………………………19五、对算法的程序的讨论、分析,改进设想,其它经验教训………………19实验六 排序…………………………………………………………20一、程序设计的基本思想,原理和算法描述………………………………20二、源程序及注释(打包上传)……………………………………………21三、运行输出结果…………………………………………………………21四、调试和运行程序过程中产生的问题及采取的措施………………………24五、对算法的程序的讨论、分析,改进设想,其它经验教训………………24实验一 线性表一、程序设计的基本思想,原理和算法描述:程序的主要分为自定义函数、主函数。自定义函数有InitList_Sq、Out_List、ListInsert_Sq、ListDelete_Sq、LocateElem_Sq、compare。主函数在运行中调用上述的自定义函数,每个自定义函数实现程序的每部分的小功能。1.程序设计基本思想用c语言编译程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。2.原理线性表通过顺序表现,链式表示,一元多项式表示,其中链式表示又分为静态链表,双向链表,循环链表等,在不同的情况下各不相同,他可以是一个数字,也可以是一个符号,通过符号或数字来实现程序的运行。3.算法描述(1)输入的形式和输入值的范围:执行插入操作时,需要输入插入的位置的元素的值;执行删除操作时,需要输入待删除元素的位置;执行查找操作时,需要输入待查找元素的值。在所有输入中,元素的值都是整数。(2)输出的形式:在所有操作中都要求显示相关操作是否正确以及操作后单链表的内容。其中删除操作完成后,要显示删除元素的值;查找操作完成后,若找到待查元素,则显示该元素在单链表中的位置。反之,给出不能找到的信息。(3)程序功能:完成单链表的生成、插入、删除、查找操作。(4)测试数据: ①依次输入元素12,34,56, 78, 90,生成一个单链表。 ②插入操作中在位置4上插入元素10。 ③删除操作中输入5 78,删除位于5的元素78。 ④查找操作中输入56,输出元素在单链表中的位置是3。二、源程序及注释(打包上传):三、运行输出结果:- 5 -
数据结构实验指导书(新版)
《数据结构和算法》
实验指导书
实验及学时数分配
序号 实验名称 学时数(小时)
1 实验一 线性表 4
2 实验二 树和二叉树 2
3 实验三 图 2
4 实验四 查找 2
5 实验五 内部排序 2
合计 12
几点要求:
一、 上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。
二、 上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。上机时签到;下机时验收签字。
三、 下机后:按要求完成实验报告,并及时提交(实验后1周内)。
实验一 线性表
【实验目的】
1、 掌握用Turbo c上机调试线性表的基本方法;
2、 掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;
3、 运用线性表解决线性结构问题。
【实验学时】
4 学时
【实验类型】
设计型
【实验内容】
1、 顺序表的插入、删除操作的实现;
2、 单链表的插入、删除操作的实现;
3、 两个线性表合并算法的实现。(选做)
【实验原理】
1、 当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;
2、 当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;
3、 详细原理请参考教材。
【实验步骤】
一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。
1、 通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)
数据结构实验指导书(2009)
《数据结构与算法》实验指导书
内蒙古工业大学信息工程学院计算机系
2009年3月1日 马晓波 秦俊平 刘利民 编
2 《数据结构与算法》实验教学大纲
一、基本信息
课程编码 020213040 课程学时 64
课程类别 学科基础课 实验总学时 12 开出学期 第四学期
开出单位 信息学院计算机系 适用专业 计算机科学与技术、软件工程
二、实验安排
序号 实 验 项 目 实验学时 每组人数 实验类型 开出
要求
1 线性表的创建与访问算法设计 4 1 设计 已开出
2 二叉树的创建与访问算法设计 4 1 设计 已开出
3 图的创建与访问算法设计 4 1 设计 已开出
三、实验目的、内容与要求
实验一 线性表的创建与访问算法设计(4学时)
(一)实验目的
数据结构于算法实验是计算机类本科学生计算机软件知识重要的实验环节,它将使学生从实践上学会用高级语言程序设计、实现复杂的数据结构,为大型软件设计奠定基础。本实验以某种线性表的创建与访问算法设计作为实验内容,举一反三,全面、深刻掌握线性结构的实现方法,培养解决问题的能力。
(二)实验内容
1、编写生成线性表的函数,线性表的元素从键盘输入;
2、编写在线性表中插入元素的函数;
3、编写在线性表中删除元素的函数;
4、编写输出线性表的函数;
5、编写主函数,调用以上各函数,以便能观察出原线性表以及作了插入或删除后线性表的屏幕输出。
方案一采用顺序存储结构实现线性表。
方案二采用单链表结构实现线性表。
(三)实验要求
1、掌握线性结构的机器内表示;
2、掌握线性结构之上的算法设计与实现;
3、列表对比分析两种数据结构的相应操作的时间复杂度、空间复杂度,阐明产生差异的原因。实验二 二叉树的创建与访问算法设计(4学时)
(一)实验目的
本实验以二叉树的创建与访问算法设计作为实验内容,掌握树型结构的实现方法,培养解决负责问题的能力。
数据结构与程序设计专题实验指导书
数据结构与程序设计
专题实验参考
1. 目标
➢ 以培养学生通过计算机编程来解决实际问题的能力为主;
➢ 通过该专题实验的进行,训练学生C语言与数据结构的知识来解决实际问题的能力,为学生以后从事程序开发、软件设计以及其它相关研究开发工作奠定基础;
➢ 针对给定的问题编写C语言程序、调试并得到正确的结果,解释程序中出现的问题,给出解决思路与方法。掌握C语言的编程方法,数据结构中的主要逻辑结构、存储结构与算法。
2. 基础知识
Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,一个在Windows 下进行32 位应用程序开发的可视化集成开发环境,提供了软件代码自动生成和可视化的资源编辑功能。相比其他的编程工具而言,VC++在提供可视化编程方法的同时,也适用于编写直接对系统进行底层操作的程序,其生成代码的质量也较其他很多开发环境更优。
在各种各样的VC++及Windows 编程的书籍中,经常会提及这样两个常见以
缩写方式出现的词:
MFC(Microsoft Foundation Class Library),即:Microsoft 基础类库,它是VC++的核心,为编程者提供了一个应用程序框架,这个应用程序框架为编程者完成了很多Windows 编程中的例行性工作,如管理窗口、菜单和对话框,执行基本的输入和输出、使用集合类来保存数据对象等等;
API(Application Programming Interface),即:应用程序接口,它是所有Windows 应用程序的根本之所在。简单的说,API 就是一系列的例程,应用程序通过调用这些例程来请求操作系统完成一些低级服务。在Windows 这样的图形用户界面中,应用程序的窗口、图标、菜单和对话框等就是由API 来管理和维护的。关于这个开发环境的一些基础性的知识内容,可以在各种参考书籍中查阅。这里不再占用篇幅。
数据结构课程实验指导书
《数据结构》实验指导书
第一部分 前言
一、实验的目的
《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作
1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。
2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。
三、实验的步骤
(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。
(二)新建一个项目文件
1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击 “开始”→“程序” →“Microsoft Visual Studio 6.0” →“Microsoft Visual C++ 6.0” 进入Visual C++ 6.0集成开发环境。
2.单击“File”菜单,选择“New”命令
3.创建一个项目文件并保存在项目所在文件夹中;
数据结构(C语言版)实验报告 (内部排序算法比较)
《数据结构与算法》实验报告
一、 需求分析
问题描述:在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
基本要求:
(l)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
(2)待排序表的表长不小于100000;其中的数据要用伪随机数程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。
(3)最后要对结果作简单分析,包括对各组数据得出结果波动大小的解释。数据测试:
二.概要设计
1. 程序所需的抽象数据类型的定义:
typedef int BOOL; //说明BOOL是int的别名
typedef struct StudentData { int num; //存放关键字
}
Data; typedef struct LinkList { int Length; //数组长度
Data Record[MAXSIZE]; //用数组存放所有的随机数
} LinkList int RandArray[MAXSIZE]; //定义长度为MAXSIZE的随机数组
void RandomNum() //随机生成函数
void InitLinkList(LinkList* L) //初始化链表
BOOL LT(int i, int j,int* CmpNum) //比较i和j 的大小
数据结构实验指导书
数据结构实验指导书
目录
实验规则 (2)
实验环境 (2)
实验报告要求 (3)
实验一单链表(一) (4)
实验二单链表(二) (5)
实验三栈 (6)
实验四二叉树 (7)
实验五最短路径 (8)
实验六内部排序 (9)
实验规则
为了顺利完成实验教学任务,确保人身、设备的安全,培养严谨、踏实、实事求是的科学作风和爱护国家财产的优良品质,特制定以下实验规则:
1、实验前必须充分预习,完成指定的预习任务。预习要求如下:
(1)认真阅读指导书,进行必要的设计与计算。
(2)熟悉实验内容。
(3)预先复习,并按要求编写程序。
(4)未完成预习任务者不得进入实验室。
2、遵守以下纪律:
(1)在实验室不得做和实验无关的事情。
(2)进行任课老师指定内容以外的实验,必须经指导教师同意。
(3)遵守纪律,不迟到。
(4)保持实验室内安静、整洁,爱护公物,不许乱写乱画。
实验环境
本实验在386以上的微机上进行,运行环境为VC6.0。
实验报告要求
1、实验题目 2.实验目的
3.实验环境
4.实验内容与完成情况(可以附上自主设计的源程序)5.出现的问题及对问题的解决方案
6.实验思考:(学生对本次实验的收获的总结)
一、实验目的
掌握线性表的链式存储结构及其基本操作。
二、预习要求
1、看懂书上的算法,深入理解链表的物理存储模式和逻辑模式。
2、根据要求,编写程序准备上机调试。
三、实验内容
实现一个简单的学生信息管理系统,该系统的功能有:
1、利用单链表建立学生基本信息表
2、浏览每个学生的信息
3、根据学号查询某个学生的基本信息
4、添加学生信息到单链表中
5、删除一个学生的信息
四、实现提示
设计结点的结构体类型,包括学生的学号、姓名、年龄、性别;要求设计一个简单的菜单界面,根据需要选择所要进行的操作;构造函数,每一个函数实现上述的一个功能。
一、实验目的
掌握线性表的链式存储结构及其基本操作。
(完整word版)数据结构(C语言版)实验报告集合的交并差
(完整word版)数据结构(C语言版)实验报告集合的交并差
《数据结构与算法》实验报告
一、 需求分析
问题描述:编制一个能演示执行集合的并、交和差运算的程序
基本要求:集合元素限定为小写字母[’a’…’z’];演示程序以用户和计算机对话方式执行。集合的输入形式为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。计算机终端中显示提示信息之后,由用户自行选择下一步命令,相应输入数据和运算结果在其后显示。
数据测试:
(1) Set1=”magazine”, Set2=’paper”,
Set1∪Set2=”aegimnprz”,Set1∩Set2=”ae”,Set1-Set2="gimnz”;
(2) Set1=”012oper4a6tion89”,Set2="error data",
Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”, Set1—Set2="inp”.
二、 概要设计
运用顺序表
1。定义顺序表
typedef struct SET{
char *elem;
int size;
int length;
}set; (完整word版)数据结构(C语言版)实验报告集合的交并差
2 基本操作:
set InitSet(set s);
//初始化集合
set Input(set s);
//向集合中输入元素
set InsertSet(set s, char e);
//向集合中插入元素
set DelateSet(set s,int n);
//从集合中删除元素
void display(set s);
//显示集合
set SetMix(set set1,set set2,set set3);
【实验】数据结构实验指导书及答案
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
【关键字】实验
数据结构课程
实 验 指 导 书
数据结构课程组 编
西南交通大学电气工程学院
一、实验教学的目的与基本要求
实验目的:
用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打下了厚实的知识基础,同时也提供了必要的技能训练。因此,数据结构课程在计算机应用中具有举足轻重的作用。
通过实验实践内容的训练,突出学生程序思维训练和动手上机调试程序的能力 , 使学生掌握数据结构的基本原理和编程方法,提高学生组织数据及编写程序的能力。
实验要求:
1、实验前要预习:实验前必须认真预习相关的知识,做好充分准备。
2、学生进入实验室,要保持室内整洁和安静。按照指定的内容进行实验。
3、学生在实验前做好预习,写好算法;实验完毕由教师验收合格后方可离开,并写好实验报告。
4、报告内容包括实验目的、实验内容、程序清单和实验结果等。要求书写文字整齐简洁。
5、 实验过程中要注意人身和设备安全,遇到事故或出现异常现象,应立即切断电源,保持现场并报告指导教师处理。
二、实验报告要求、实验考核方式、内容及成绩评定标准
实验报告要求内容清晰完整,写出实验结果。
实验考核方式依据实验报告完成情况和实验上机情况综合考核。
根据实验报告和实验课出席情况给出实验成绩,满分10分。
三、实验教材及参考书
《数据结构》严蔚敏 清华大学出版社 2005文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
实验一 熟悉开发环境和抽象数据类型
一.实验目的
1.熟悉VC软件开发环境。
2.熟悉抽象数据类型的定义与应用。
二.实验内容
1.在VC下编写程序,实现求出从键盘输入的两个数的最大值。例如,从键盘输入a=4,
b=5。得出结果c = 5
数据结构验证性实验指导书
实验一 线性表的顺序存储实验
一、实验目的
1、掌握用Visual C++6.0上机调试顺序表的基本方法
2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现
二、实验内容
1、顺序表基本操作的实现
[问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。
[基本要求] 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。
[实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。
[程序实现]
#include
#include
typedef int DataType ;
# define maxnum 20
typedef struct
{int data[maxnum];
int length;
}SeqList;
/*插入函数*/
int insert(SeqList *L , int i , DataType x)
/* 将新结点x插入到顺序表L第i个位置 */
{ int j ;
if( i<0 || i>(*L).length +1)
{ printf(" \n i 值不合法 ! ");
return 0;
}
if((* L).length >=maxnum-1)
{ printf(" \n 表满不能插入!");
return 0;
}
for(j=(*L).length;j>=i;j--) (*L).data[j+1]=(*L).data[j];
(*L).data[i] = x;
(*L).length++;
return 1;
}
/*删除函数*/
int delete( SeqList *L ,int i)
/*从顺序L中删除第i个结点*/
