2017数据结构实验指导书

合集下载

数据结构实验指导书

数据结构实验指导书

《数据结构》实验指导书实验一顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。

实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。

实验内容:1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求:(1)设数据元素为整数,实现线性表的顺序存储表示。

(2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。

(3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。

2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求:(1)数据元素为学生成绩(含姓名、成绩等字段)。

(2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。

(这里用于比较的字段为分数)实验二链表实验目的:熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。

实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容:1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下:(1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。

(2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表并带有头结点。

(用于比较的字段为分数)。

(3)输入关键字值x,打印出表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(4)输入关键字值x,删除表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。

(用于比较的字段为分数)。

实验三栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。

实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。

实验内容:(1)判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。

数据结构实验-实验指导书

数据结构实验-实验指导书

实验一线性表操作一、实验目的1熟悉并掌握线性表的逻辑结构、物理结构。

2熟悉并掌握顺序表的存储结构、基本操作和具体的函数定义。

3熟悉VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。

4熟悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。

二、实验要求1实验之前认真准备,编写好源程序。

2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3不断积累程序的调试方法。

三、实验内容基本题:1对元素类型为整型的顺序存储的线性表进行插入、删除和查找操作。

加强、提高题:2、编写一个求解Josephus问题的函数。

用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人。

然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。

最后分析所完成算法的时间复杂度。

定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。

(可以选做其中之一)加强题:(1)采用数组作为求解过程中使用的数据结构。

提高题:(2)采用循环链表作为求解过程中使用的数据结构。

运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。

实验二栈、队列、递归应用一、实验目的1熟悉栈、队列这种特殊线性结构的特性2熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。

二、实验要求1实验之前认真准备,编写好源程序。

2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3不断积累程序的调试方法。

三、实验内容基本题(必做):1分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。

2、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。

加强题:3设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。

《数据结构》实验教学指导书.

《数据结构》实验教学指导书.

《数据结构》实验教学指导书数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。

基于以上的三点要求,在整本书中贯穿这样的中心思想:让读者通过数据结构的实验课,理论结合实践,达到这三点要求。

读者在使用这本书时,要以这三点要求为出发点,力求理解结构、掌握算法、读懂程序。

本书每个实验,都给出了明确的实验目的、简明的实验原理,限于篇幅,没有给出详细的说明,事实上也没有必要。

因为这些读者可以从课堂和书本上得到。

所以读者应该详细的读懂书上的相关部分,然后依据本书认真实验。

考虑到读者的水平的差异,本书给出了参考程序,所有的参考程序都已在TURBO C2.0上通过编译,结果正确,可以参考。

但是在上机时,应当注意避免输入参考程序了事,应当事先编写自己的程序,上机调试,参考程序只是用做参考。

另外,有些参考程序也不是最佳的,应对之进行改进处理。

实验时,还应多多考虑怎样将每一个实验应用到实际当中去,举一反三,可以不必拘泥于某一个实验,要前后贯通,注意对基本的数据结构的理解和普遍的算法的研究。

目录实验一熟悉C语言 (5)实验二线性表 (9)实验三栈 (14)实验四串 (17)实验五数组和广义表 (20)实验六树的操作(二叉树及其先序遍历) (24)实验七图的操作(邻接表的建立) (28)实验八排序 (33)数据结构课程名称:数据结构英文名称:Data Structures设置形式:非独立设课课程模块:专业核心课实验课性质:专业实验课程编号:501816课程负责人:邱秀伟大纲主撰人:邱秀伟大纲审核人:李焕勤一、学时、学分课程总学48实验学时:16课程学分:3时:二、适用专业及年级教育技术学三、课程目标与基本要求本课程学习的目的是使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。

2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。

3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。

二、实验环境1、操作系统:Windows 或 Linux 操作系统。

2、编程语言:C、C++、Java 等编程语言中的一种。

3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。

三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。

2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。

3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。

四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。

利用栈解决表达式求值、括号匹配等问题。

2、队列的实现与应用实现顺序队列和链式队列。

利用队列解决排队问题、广度优先搜索等问题。

(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。

实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。

2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书实验1:顺序表基本操作一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。

2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。

3.掌握对多函数程序的输入、编辑、调试和运行过程。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对顺序表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容:1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。

(2)将La置为空表。

(3)销毁La。

(4)在La中插入一个新的元素。

(5)删除La中的某一元素。

(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。

(7)打印输出La中的元素值。

2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。

(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。

(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。

四、思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ?一、实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。

2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对单链表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。

(2)在La中插入一个新结点。

(3)删除La中的某一个结点。

(4)在La中查找某结点并返回其位置。

数据结构实验指导书(C版)

数据结构实验指导书(C版)

数据结构实验指导书(C语言版)2017年9月目录1、顺序表的实现 (1)2、链栈的实现 (3)3、前序遍历二叉树 (5)4、图的深度优先遍历算法 (7)5、散列查找 (9)1、顺序表的实现1. 实验目的⑴掌握线性表的顺序存储结构;⑵验证顺序表及其基本操作的实现;⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。

2. 实验内容⑴建立含有若干个元素的顺序表;⑵对已建立的顺序表实现插入、删除、查找等基本操作。

3. 实现提示定义顺序表的数据类型——顺序表结构体SeqList,在SeqList基础上实现题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。

简单起见,本实验假定线性表的数据元素为int型,要求学生:(1)将实验程序调试通过后,用模板类改写;(2)加入求线性表的长度等基本操作;(3)重新给定测试数据,验证抛出异常机制。

4. 实验程序在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序表结构体SeqList的定义,范例程序如下:#define MaxSize 100 /*假设顺序表最多存放100个元素*/typedef int DataType; /*定义线性表的数据类型,假设为int型*/typedef struct{DataType data[MaxSize]; /*存放数据元素的数组*/int length; /*线性表的长度*/} SeqList;文件包括建立顺序表、遍历顺序表、按值查找、插入操作、删除操作成员函数的定义,范例程序如下:int CreatList(SeqList *L, DataType a[ ], int n){if (n > MaxSize) {printf("顺序表的空间不够,无法建立顺序表\n"); return 0;} for (int i = 0; i < n; i++)L->data[i] = a[i];L->length = n;return 1;}void PrintList(SeqList *L){for (int i = 0; i < L->length; i++)printf("%d ", L->data[i]); /*输出线性表的元素值,假设为int型*/ }int Locate(SeqList *L, DataType x){for (int i = 0; i < L->length; i++)if (L->data[i] == x) return i+1; /*返回序号*/return 0; /*退出循环,说明查找失败*/ }int Insert(SeqList *L, int i, DataType x){if (L->length >= MaxSize) {printf("上溢错误,插入失败\n"); return 0;} if (i < 1 || i > L->length + 1) {printf("位置错误,插入失败\n"); return 0;} for (int j = L->length; j >= i; j--) /*j表示元素序号*/L->data[j] = L->data[j - 1];L->data[i - 1] = x;L->length++;return 1;}int Delete(SeqList *L, int i, DataType *ptr){if (L->length == 0) {printf("下溢错误,删除失败\n"); return 0;} if (i < 1 || i > L->length) {printf("位置错误,删除失败\n"); return 0;} *ptr = L->data[i - 1]; /*取出位置i的元素*/for (int j = i; j < L->length; j++) /* j表示元素所在数组下标*/L->data[j - 1] = L->data[j];L->length--;return 1;}在定义了顺序表的存储结构SeqList并实现了基本操作后,程序中就可以使用SeqList 类型来定义变量,可以调用实现基本操作的函数来完成相应的功能。

数据与算法基础(数据结构)实验指导书

数据与算法基础(数据结构)实验指导书
{
}
/*
*前置条件:顺序表存在
*输入:要删除元素位置i
*功能:删除顺序表中位置为i的元素
*输出:无
*后置条件:顺序表删除元素
*/
template <class T>
T SeqList<T>::Delete(int i)
{
}
/*
*前置条件:顺序表存在
*输入:无
*功能:输出顺序表长度
*输出:顺序表长度
*后置条件:顺序表不变
{
}
/*
*前置条件:顺序表存在
*输入:查询元素值x
*功能:按值查找值的元素并输出位置
*输出:查询元素的位置
*后置条件:顺序表不变
*/
template <class T>
int SeqList<T>::Locate(T x)
{
}
/*
*前置条件:顺序表存在
*输入:无
*功能:顺序表遍历
*输出:输出所有元素
cout<<endl;
cout<<"顺序表a的长度为:";
cout<<a.Length()<<endl; //返回单链表长度
cout<<endl;
cout<<"按位查询第二个元素:"<<endl;
cout<<"第二个元素为:";
cout <<a.Get(2)<<endl; //查找顺序表中第二个元素
}
cout<<endl;
cout<<"顺序表a中的元素有:"<<endl;

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书适用所有开设数据结构实验的专业雷文赵攀编写概述一、课程目的《数据结构》是一门实践性很强的软件基础课程,为了学好这门课,每个学生必须完成一定数量的上机作业。

通过本课程的上机作业,要求在数据结构的选择和应用、算法的设计及实现等方面加深对课程基础内容的理解,同时,实验题中的问题比平时的练习题要复杂,也更接近实际,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

本课程实验的目的是旨在使学生进一步巩固课堂上所学的理论知识;深化理解和灵活掌握教学内容;培养学生算法设计的能力和解决实际问题的程序设计的能力。

二、实验名称与学时分配三、实验要求⒈问题分析充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。

⒉数据结构设计针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。

对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。

⒊算法设计算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题.详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,采用类C语言描述。

⒋测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。

⒌上机调试对程序进行编译,纠正程序中可能出现的语法错误,测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。

三、实验考核每次实验结束后,均应上交实验报告。

数据结构课程实验成绩单独考核,占1个学分。

实验报告应包括如下内容:1、问题描述:简述题目要解决的问题是什么。

数据结构 实验指导书

数据结构 实验指导书

数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)上机实验题目 (3)实验一 C语言相关知识复习 (3)一、实验目的 (3)二、实验内容 (3)实验二单链表的插入、删除 (3)一、实验目的 (3)二、实验内容 (3)三、实现提示 (4)实验三栈及其应用 (5)一、实验目的 (5)二、实验内容 (5)实验四二叉树的递归算法 (6)一、实验目的 (6)二、实验内容 (6)实验五图的遍历 (7)一、实验目的 (7)二、实验内容 (7)实验六有序表的查找 (7)一、实验目的 (7)二、实验内容 (7)实验七哈希表 (7)一、实验目的 (7)二、实验内容 (7)实验八内部排序算法的应用 (8)一、实验目的 (8)二、实验内容 (8)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。

本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。

由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。

为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。

上机实践是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通过上机实践,使学生在可能短的时间内对数据结构知识的实践和应用有一个比较全面和系统的认识,达到理论与实践相结合的目的。

数据结构课程实验指导书

数据结构课程实验指导书

《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。

本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。

数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。

实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。

通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。

二、实验前的准备工作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.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。

数据结构实验指导书(本科正式)

数据结构实验指导书(本科正式)

《数据结构》实验指导书实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。

【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。

【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书院别专业班级姓名计算机学院编实验一线性表的顺序存储实验一、实验目的及要求1、掌握在TC环境下调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。

二、实验学时2学时三、实验任务1、生成一个顺序表并动态地删除任意元素和在任意位置插入元素。

2、将两个有序表合并成一个有序表。

四、实验重点、难点1、在顺序表中移动元素。

2、在顺序表中找到正确的插入位置。

五、操作要点(一)顺序表基本操作的实现[问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。

[基本要求] 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。

[实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。

[程序实现]#include <stdio.h>#include <conio.h>typedef int DataType ;# define maxnum 20typedef 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个结点*/{ int j ;if( i<0|| i>(*L).length ){ printf(" \n 删除位置错误 ! ") ;return 0;}for(j=i+1;j<=(*L).length;j++)(*L).data[j-1] =(*L).data[j];(*L).length--;return 1;}/*生成顺序表*/void creatlist(SeqList * L){ int n , i , j ;printf("请输入顺序表 L 的数据个数:\n") ;scanf("%d" , &n) ;for(i=0 ; i<n ; i++){ printf("data[%d] =" , i) ;scanf("%d",&((*L).data[i]));}(*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).data[i]);}/*printout */printf("\n");}main(){ SeqList *L ;char cmd ;int i , t , x;clrscr() ;creatlist(L);do{printf("\ni , I ----- 插入\n") ;printf("d , D ----- 删除\n") ;printf("q , Q ----- 退出\n") ;do{cmd=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? ");scanf("%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 <stdio.h># define maxnum 20typedef int DataType ;typedef struct{ DataType data[maxnum] ;int length ;}SeqList ;int MergeQL(SeqList la , SeqList lb , SeqList *lc){ int i , j , k ;if (la.length+1 + lb.length+1>maxnum){ printf("\narray overflow!") ;return 0;}i=j=k=0;while(i<=la.length && j<=lb.length){ if (la.data[i]<=lb.data[j])lc->data[k++]=la.data[i++] ;elselc->data[k++]=lb.data[j++];}/* 处理剩余部分 */while (i<=la.length) lc->data[k++]=la.data[i++];while (j<=lb.length) lc->data[k++]=lb.data[j++];lc->length=k-1;return 1;}main(){ SeqList la={{3,4,7,12,15},4} ;SeqList lb={{2,5,7,15,18,19},5} ;SeqList lc ;int i ;if (MergeQL(la,lb,&lc)){ printf("\n") ;for(i=0;i<=lc.length ; i++)printf("%4d",lc.data[i]);}}六、注意事项1、删除元素或插入元素表的长度要变化。

数据结构课程实验指导书

数据结构课程实验指导书

数据结构实验指导书一、实验目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。

本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

由于以下原因,使得掌握这门课程具有较大的难度:1)理论艰深,方法灵活,给学习带来困难;2)内容丰富,涉及的知识较多,学习有一定的难度;3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度;根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。

课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:(1)加深对课堂讲授内容的理解实验是对学生的一种全面综合训练。

是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,实验题中的问题比平时的习题复杂得多,也更接近实际。

实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变"活",起到深化理解和灵活掌握教学内容的目的。

不少学生在解答习题尤其是算法设计时,觉得无从下手。

实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。

(2)培养学生软件设计的综合能力平时的练习较偏重于如何编写功能单一的"小"算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。

数据结构实验指导书

数据结构实验指导书

《数据结构》实验指导书贵州大学电子信息学院通信工程目录实验一顺序表的操作 (3)实验二链表操作 (8)实验三集合、稀疏矩阵和广义表 (19)实验四栈和队列 (42)实验五二叉树操作、图形或网状结构 (55)实验六查找、排序 (88)贵州大学实验报告 (109)实验一顺序表的操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。

2、以线性表的各种操作(建立、插入、删除等)的实现为重点。

3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。

二、实验内容及步骤要求1、定义顺序表类型,输入一组整型数据,建立顺序表。

typedef int ElemType; //定义顺序表struct List{ElemType *list;int Size;int MaxSize;};2、实现该线性表的删除。

3、实现该线性表的插入。

4、实现线性表中数据的显示。

5、实现线性表数据的定位和查找。

6、编写一个主函数,调试上述算法。

7、完成实验报告。

三、实验原理、方法和手段1、根据实验内容编程,上机调试、得出正确的运行程序。

2、编译运行程序,观察运行情况和输出结果。

四、实验条件运行Visual c++的微机一台五、实验结果与分析对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。

六、实验总结记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

【附录----源程序】#include<stdio.h>#include<iostream>using namespace std;typedef int ElemType;struct List{ElemType *list;int Size;int MaxSize;};//初始化线性表bool InitList(List &L){L.MaxSize=20;L.list=new ElemType[L.MaxSize];for(int i=0;i<20&&L.list==NULL;i++){L.list=new ElemType[L.MaxSize];}if(L.list==NULL){cout<<"无法分配内存空间,退出程序"<<endl;return false;}L.Size=0;return true;}//向线性表中插入元素bool InsertList(List &L,int pos,ElemType item){if(pos>L.Size+1||pos<1){cout<<"位置无效"<<endl;return false;}else if(L.Size==L.MaxSize){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,2*L.MaxSize*k);if(L.list==NULL){cout<<"动态分配内存失败,退出运行"<<endl;return false;}L.MaxSize=2*L.MaxSize;}for(int i=L.Size-1;i>=pos-1;i--){L.list[i+1]=L.list[i];}L.list[pos-1]=item;L.Size++;return true;}//删除线性表中的元素bool DeleteList(List &L,ElemType &item,int pos){if(L.Size==0){cout<<"线性表中没有元素,无法删除"<<endl;return false;}if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}item=L.list[pos-1];for(int i=pos;i<L.Size;i++)L.list[i-1]=L.list[i];L.Size--;if(float(L.Size)/L.MaxSize<0.4&&L.Size>10){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,L.MaxSize*k/2);L.MaxSize=L.MaxSize/2;}return true;}//输出线性表bool Print(List &L){if(L.Size==0){cout<<"线性表中无元素"<<endl;return false;}cout<<"线性表为:"<<endl;for(int i=0;i<L.Size;i++){cout<<L.list[i]<<" ";}cout<<"线性表长度为"<<L.Size<<endl;return true;}//查找数据bool GetList(List L,ElemType item,int pos){if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}int k;cout<<"按位置查找选择1,按元素查找选择0"<<endl;cin>>k;if(k==1){cout<<"第"<<pos<<"个元素为"<<L.list[pos-1]<<endl;return true;}else if(k==0){for(int i=0;i<L.Size;i++){if(L.list[i]==item)cout<<"你要找的元素为"<<":"<<item<<"在第"<<i+1<<"个"<<endl;if(i==L.Size){cout<<"没有你要找的元素"<<endl;return false;}}}else{cout<<"查找无效,请选择0或1"<<endl;return false;}}void main(){List m;InitList(m);//初始化线性表Print(m);cout<<"请输入十个数据"<<endl;for(int i=0;i<10;i++){cin>>m.list[i];m.Size++;}Print(m);cout<<"向线性表中第r个位置插入s"<<endl;cout<<"请输入r,s"<<endl;int r;ElemType s;cin>>r>>s;cout<<"(m,r,s)"<<endl;//向线性表中插入元素InsertList(m,r,s);Print(m);cout<<"查找数据s或者查找第r个数据"<<endl;cin>>s>>r;GetList(m,s,r);Print(m);ElemType f=0;cout<<"删除第r个数据"<<endl;cin>>r;DeleteList(m,f,r);Print(m);cout<<"删除的数据是"<<f<<endl;}实验二链表操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、掌握链表的概念,了解线性表的链式存储结构,学会定义线性表的链式存储结构。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的本实验旨在通过实践操作,加深对数据结构的理解,掌握数据结构的基本操作和算法设计。

二、实验内容1. 实验环境搭建:a. 安装编程环境,如C++编译器或Java开发环境。

b. 配置相关的开发工具和库文件。

2. 实验一:线性表的实现与应用a. 实现线性表的基本操作,包括初始化、插入、删除、查找等。

b. 实现线性表的应用,如实现一个简单的通讯录管理系统。

3. 实验二:栈和队列的实现与应用a. 实现栈的基本操作,包括入栈、出栈、判空等。

b. 实现队列的基本操作,包括入队、出队、判空等。

c. 实现栈和队列的应用,如实现一个简单的表达式计算器。

4. 实验三:二叉树的实现与应用a. 实现二叉树的基本操作,包括创建、插入、删除、遍历等。

b. 实现二叉树的应用,如实现一个简单的文件系统。

5. 实验四:图的实现与应用a. 实现图的基本操作,包括创建、插入节点、插入边、遍历等。

b. 实现图的应用,如实现一个简单的社交网络系统。

三、实验步骤1. 实验环境搭建:a. 下载并安装编程环境,如Dev-C++或Eclipse。

b. 配置相关的开发工具和库文件,确保能够正常编译和运行程序。

2. 实验一:线性表的实现与应用a. 设计线性表的数据结构,包括元素类型和相关操作。

b. 实现线性表的初始化、插入、删除和查找等基本操作。

c. 设计并实现一个简单的通讯录管理系统,包括添加联系人、删除联系人和查找联系人等功能。

3. 实验二:栈和队列的实现与应用a. 设计栈和队列的数据结构,包括元素类型和相关操作。

b. 实现栈的入栈、出栈和判空等基本操作。

c. 实现队列的入队、出队和判空等基本操作。

d. 设计并实现一个简单的表达式计算器,支持基本的四则运算。

4. 实验三:二叉树的实现与应用a. 设计二叉树的数据结构,包括节点类型和相关操作。

b. 实现二叉树的创建、插入、删除和遍历等基本操作。

c. 设计并实现一个简单的文件系统,支持文件和文件夹的创建、删除和查找等功能。

《数据结构 》实验指导书(3)

《数据结构 》实验指导书(3)

《数据结构》实验指导书实验类别:课内实验实验课程名称:数据结构实验室名称:软件工程实验室实验课程编号:02060002总学时:64 学分: 4适用专业:计算机科学与技术、网络工程、软件工程先修课程:计算机导论及操作、离散数学实验在教学培养计划中地位、作用:数据结构是计算机软件相关专业的主干课程,也是计算机软硬件专业的重要基础课程。

数据结构课程实验的目的是通过实验掌握数据结构的基本理论和算法,并运用它们来解决实际问题。

数据结构课程实验是提高学生动手能力的重要的实践教学环节,对于培养学生的基本素质以及掌握程序设计的基本技能并养成良好的程序设计习惯方面发挥重要的作用。

实验一线性表的应用(2学时)1、实验目的通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。

2、实验内容建立某班学生的通讯录,要求用链表存储。

具体功能包括:(1)可以实现插入一个同学的通讯录记录;(2)能够删除某位同学的通讯录;(3)对通讯录打印输出。

3、实验要求(1)定义通讯录内容的结构体;(2)建立存储通讯录的链表结构并初始化;(3)建立主函数:1)建立录入函数(返回主界面)2)建立插入函数(返回主界面)3)建立删除函数(返回主界面)4)建立输出和打印函数(返回主界面)I)通过循环对所有成员记录输出II)输出指定姓名的某个同学的通讯录记录5)退出实验二树的应用(2学时)1、实验目的通过本实验掌握二叉的建立和递归遍历、非递归遍历算法,了解二叉树在实际中的应用并熟练运用二叉树解决实际问题。

2、实验内容根据前序遍历的顺序建立一棵二叉树,并根据遍历规则遍历二叉树。

打印输出。

3、实验要求(1)根据前序遍历的顺序创建一棵二叉树;()对二叉树进行前序、中序、后序遍历。

实验三图的应用(2学时)1、实验目的通过本实验掌握图的存储结构与基本运算以及图的深度优先遍历和图的广度优先遍历算法在实际问题中的应用。

2、实验内容按照邻接表对图进行创建,并运用图的深度优先遍历和图的广度优先遍历算法对所创建的无向图进行遍历。

《数据结构》实验指导书

《数据结构》实验指导书

《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 1 一、实验的作用和目的 ..................... 2 二、实验方式与考核方式................... 2 三、实验要求 ............................. 3 四、实验报告要求......................... 4 五、实验内容 .. (5)实验一线性表应用 (5)实验二栈与队列应用 (10)实验三二叉树的操作 (14)实验四图的遍历 ................................................18 实验五查找算法应用 (21)六、选做实验内容 (24)实验六排序 ................................................ ....24 实验七数组和广义表 (26)实验八串 ................................................ . (27)前言《数据结构》数据结构是计算机科学与技术及相关专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。

这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。

通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法,以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在计算机科学中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁、高效、实用的算法;并为学习《操作系统》、《编译原理》、《数据库原理》等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。

《数据结构》实 验 指 导 书.doc

《数据结构》实 验 指 导 书.doc

《数据结构(C#)》实验指导书软件学院—、上机实验的指导思想和要求1.1 上机实验的目的上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。

上机实验的目的是:(1)加深对讲授内容的理解,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,通过多次上机,就能自然地、熟练地掌握。

(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C#程序开发的环境。

一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。

使用者应该了解为了运行一个C#程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。

每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会。

(3)学会上机调试程序。

也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。

经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。

而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。

要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。

对程序设计来说,则要求会编程序并上机调试通过。

因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。

调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。

别人的经验不能代替自己的经验。

调试程序的能力是每个程序设计人员应当掌握的一项基本功。

因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验指导书贵州大学电子信息学院通信工程目录实验一顺序表的操作 (3)实验二链表操作 (8)实验三集合、稀疏矩阵和广义表 (19)实验四栈和队列 (42)实验五二叉树操作、图形或网状结构 (55)实验六查找、排序 (88)贵州大学实验报告 (109)实验一顺序表的操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。

2、以线性表的各种操作(建立、插入、删除等)的实现为重点。

3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。

二、实验内容及步骤要求1、定义顺序表类型,输入一组整型数据,建立顺序表。

typedef int ElemType; //定义顺序表struct List{ElemType *list;int Size;int MaxSize;};2、实现该线性表的删除。

3、实现该线性表的插入。

4、实现线性表中数据的显示。

5、实现线性表数据的定位和查找。

6、编写一个主函数,调试上述算法。

7、完成实验报告。

三、实验原理、方法和手段1、根据实验内容编程,上机调试、得出正确的运行程序。

2、编译运行程序,观察运行情况和输出结果。

四、实验条件运行Visual c++的微机一台五、实验结果与分析对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。

六、实验总结记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

【附录----源程序】#include<stdio.h>#include<iostream>using namespace std;typedef int ElemType;struct List{ElemType *list;int Size;int MaxSize;};//初始化线性表bool InitList(List &L){L.MaxSize=20;L.list=new ElemType[L.MaxSize];for(int i=0;i<20&&L.list==NULL;i++){L.list=new ElemType[L.MaxSize];}if(L.list==NULL){cout<<"无法分配内存空间,退出程序"<<endl;return false;}L.Size=0;return true;}//向线性表中插入元素bool InsertList(List &L,int pos,ElemType item){if(pos>L.Size+1||pos<1){cout<<"位置无效"<<endl;return false;}else if(L.Size==L.MaxSize){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,2*L.MaxSize*k);if(L.list==NULL){cout<<"动态分配内存失败,退出运行"<<endl;return false;}L.MaxSize=2*L.MaxSize;}for(int i=L.Size-1;i>=pos-1;i--){L.list[i+1]=L.list[i];}L.list[pos-1]=item;L.Size++;return true;}//删除线性表中的元素bool DeleteList(List &L,ElemType &item,int pos){if(L.Size==0){cout<<"线性表中没有元素,无法删除"<<endl;return false;}if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}item=L.list[pos-1];for(int i=pos;i<L.Size;i++)L.list[i-1]=L.list[i];L.Size--;if(float(L.Size)/L.MaxSize<0.4&&L.Size>10){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,L.MaxSize*k/2);L.MaxSize=L.MaxSize/2;}return true;}//输出线性表bool Print(List &L){if(L.Size==0){cout<<"线性表中无元素"<<endl;return false;}cout<<"线性表为:"<<endl;for(int i=0;i<L.Size;i++){cout<<L.list[i]<<" ";}cout<<"线性表长度为"<<L.Size<<endl;return true;}//查找数据bool GetList(List L,ElemType item,int pos){if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}int k;cout<<"按位置查找选择1,按元素查找选择0"<<endl;cin>>k;if(k==1){cout<<"第"<<pos<<"个元素为"<<L.list[pos-1]<<endl;return true;}else if(k==0){for(int i=0;i<L.Size;i++){if(L.list[i]==item)cout<<"你要找的元素为"<<":"<<item<<"在第"<<i+1<<"个"<<endl;if(i==L.Size){cout<<"没有你要找的元素"<<endl;return false;}}}else{cout<<"查找无效,请选择0或1"<<endl;return false;}}void main(){List m;InitList(m);//初始化线性表Print(m);cout<<"请输入十个数据"<<endl;for(int i=0;i<10;i++){cin>>m.list[i];m.Size++;}Print(m);cout<<"向线性表中第r个位置插入s"<<endl;cout<<"请输入r,s"<<endl;int r;ElemType s;cin>>r>>s;cout<<"(m,r,s)"<<endl;//向线性表中插入元素InsertList(m,r,s);Print(m);cout<<"查找数据s或者查找第r个数据"<<endl;cin>>s>>r;GetList(m,s,r);Print(m);ElemType f=0;cout<<"删除第r个数据"<<endl;cin>>r;DeleteList(m,f,r);Print(m);cout<<"删除的数据是"<<f<<endl;}实验二链表操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、掌握链表的概念,了解线性表的链式存储结构,学会定义线性表的链式存储结构。

2、加深对链式存储数据结构的理解,逐步培养解决实际问题的编程能力。

二、实验内容及步骤要求1、简单链表的基本操作(1) 编写链表基本操作函数。

①初始化链表InitList(LIST *L,int ms)②向链表指定位置插入元素InsertList1(LIST *L,int item,int rc)③向有序链表指定位置插入元素InsertList2(LIST *L,int item,int rc)④删除指定元素之的链表记录DeleteList(LIST *L,int item)⑤查找链表中的元素FindList(LIST *L,int item)(2) 调用上述函数实现下列操作,操作步骤如下:①从键盘输入一个数据元素x,插入到线性表中第i(包含1号位置)个位置;②从键盘输入一个数据元素关键字x或位置i(包含1号位置),从线性表中删除相应数据元素。

2、约瑟夫环问题(1) 约瑟夫(Joeph)问题的一种描述:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。

报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。

(2) 编程实现约瑟夫环问题,利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。

(3) 试设计一个程序求出出列顺序。

并设m的初值为20;密码:3,1,7,2,4,8,4(正确的结果应为6,1,4,7,2,3,5)。

3、完成实验报告。

三、实验原理、方法和手段1、根据实验内容编程,上机调试、得出正确的运行程序。

2、编译运行程序,观察运行情况和输出结果。

四、实验条件运行Visual c++的微机一台五、实验结果与分析对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。

六、实验总结记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

相关文档
最新文档