数据结构实验指导书(2012.9)
数据结构实验指导书

《数据结构》实验指导书实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
(这里用于比较的字段为分数)练习及思考题:(1)顺序表的操作上有什么特点?(2)不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。
实验二、链表实验目的:熟悉链式表的逻辑特性、存储表示方法的特点和链式表的基本操作。
实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。
(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。
(3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。
(用于比较的关键字字段为分数)。
(4) 输入关键字值x,删除表中所有关键字值<=x的结点。
(用于比较的关键字字段为分数)。
练习及思考题:(1)不同类型的数据元素所对应的链式表在类型定义和操作实现上有什么异同?(2)有头结点的链式表,有什么特点?实验三、栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。
实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。
实验内容:(1) 判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。
数据结构实验指导书(2012.9)

1.2实验报告(文档)书写规范实验报告(文档)应包括以下7个方面的内容:1、问题分析根据对实验任务的理解,以无歧义的陈述说明程序设计的任务,强调的是程序要做什么。
指出解决问题的关键步骤,如果问题复杂,应将问题分解成若干个子问题。
明确规定:(1)本实验的任务以及程序所能达到的功能;(2)完成该任务需要解决的关键问题;(3)程序设计中输入数据的类型、形式及输入值的范围;(4)设置测试数据:包括正确的输入及预计的输出结果和含有错误的输入及预计输出结果。
2.概要设计针对问题分析中提出的关键问题进行分析(可以列举实例进行分析),从而总结出关键问题的解决思路,给出解决关键问题的算法思想。
说明本程序中用到的所有程序模块、各程序模块之间的层次(调用)关系以及主程序的流程,各程序模块使用中文名称即可。
3.详细设计根据概要设计中提出的关键问题的解决思路,设计本程序中用到的所有数据结构,要求做到:(1)在所设计的数据结构下分析关键问题的具体解决方案和步骤,给出相应的用类C 语言描述的算法;(2)分析设计程序中需要用到的变量、全局变量及其数据类型定义;(3)设计程序中的所有模块(自定义函数和主函数),通过分析定义函数的类型、描述函数参数、说明函数名称,并给出相应类C语言描述的算法(类C语言算法达到的详细程度建议为:按照该算法可以直接写出高级程序设计语言程序);(4)画出函数和过程的调用关系图。
4.调试分析程序调试主要实现程序的语法错误检查和功能性错误检查。
调试最好分模块进行,自底向上,即先调试低层过程或函数。
在实验报告中应有如下内容:(1)记录调试过程中遇到的问题及其解决方案,如果由此反映出程序设计的不足,应对设计与实现进行回顾讨论和分析,并修正;(2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(3)经验和体会等。
5.测试结果将程序的测试结果截图,展示出你的测试过程和结果,包括输入和输出。
《数据结构》实验指导书

1.单链表的类型定义
#include <stdio.h>
typedef int ElemType;//单链表结点类型
typedef struct LNode
{ElemType data;
struct LNode *next;
2.明确栈、队列均是特殊的线性表。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验四 串
一、预备知识
1.字符串的基本概念
2.字符串的模式匹配算法
二、实验目的
1.理解字符串的模式匹配算法(包括KMP算法)
typedef struct
{ElemType *base;
int front,rear;
} SqQueue;
4.单链队列的类型定义
typedef struct QNode
{QElemType data;
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.三元组表是线性表的一种应用,通过它可以更好地理解线性表的存储结构。同时矩阵又是图的重要的存储方式,所以这个实验对更好地掌握线性表对将来对图的理解都有极大的帮助。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验六 树和二叉树
一、预备知识
1.二叉树的二叉链表存储结构
《数据结构》实验指导书 2012最新版

目录实验一线性表基本操作的编程实现 (1)实验二堆栈或队列基本操作的编程实现 (8)实验三串基本操作的编程实现 (14)实验四二维数组基本操作的编程实现 (18)实验五二叉树基本操作的编程实现 (20)实验六图基本操作的编程实现 (33)实验七查找技术的编程实现 (43)实验八排序技术的编程实现 (49)附录一实验常见问题问答 (56)附录二如何准备实验 (56)附录三如何写实验报告 (57)附录四实验报告书写标准 (57)(特别提示:程序设计包含两个方面的错误。
其一是语法错误,其二是功能错误。
为了提高学生的编程和调试能力,本指导书给出的程序代码并不保证没有上述的两种错误。
并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的教学要求。
希望大家以自己所学高级语言的基本功和数据结构原理的思考点为基础,不要过于依赖给出的参考代码,这样才能有所进步。
如果学生能够根据要求完全自己编制,那就更好了。
)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构要求是链表存储结构(顺序存储结构建议作为课外实验完成),可以依次完成主要功能来体现功能的正确性,用菜单进行管理完成大部分功能,要求可以重复运行。
还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】1.线性表的链表存储,实现数据插入、删除运算。
为了体现功能的正常性,同时要编制数据输入函数和遍历函数,数据输入可以用1.键盘输入 2.内部预置数据 3.计算机自动给出 4.文件读入。
最好同时提供多种方式。
2.其他建议改进的功能或细节:存储结构修改为循环链表、双向链表、双向循环链表、静态链表等。
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、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。
数据结构实验指导书(国教)

南昌工程学院《数据结构》实验指导书10计算机应用技术(中韩)(专)徐晨光编2012 年 2月目录实验一:C语言相关知识复习实验 (3)实验二:线性表实验 (4)实验三:栈和队列实验 (6)实验四:数组、串 (8)实验五:二叉树实验 (9)实验六:图 (12)实验七:查找实验 (13)实验八:排序 (14)实验一C语言相关知识复习实验一、实验目的巩固复习前期所学C语言的函数参数传递、指针和结构体等知识点,加强学习数据结构语言基础。
二、实验内容1.学生信息的显示,具体要求如下:1)定义一个结构体描述学生信息(学号,姓名,性别,年龄,住址);2)设计一个函数,用于显示单个学生信息,函数的参数为前面定义的结构体类型;3)设计一个主函数,在主函数中输入学生的信息,并调用前面定义的函数进行显示(学生人数不少于5人)。
提示:可用结构体数组保存学生信息。
2. 输入若干个整数作为数组元素值,然后按输入时顺序的就地逆置排序,最后打印出逆置后的元素值。
要求用指针和动态内存分配方法实现。
例如输入:10 2 30 4 5,逆置后显示为:5 4 30 2 10。
提示:1.逆置的方法:设有n个数据元素a(0),a(1),a(2)…….,a(n-1),将第i个元素与第n-i-1个元素调换位置即可。
2.采用动态内存分配方法可参考如下代码int *a;int i;a=(int *)malloc(N*sizeof(int));//动态分配起始地址for(i=0;i<N;i++){ scanf("%d",&a[i]);}//给内存空间赋值三、实验源代码此处写程序源代码,请在程序中适当注释,便于老师更快地看懂你的程序。
四、实验结果此处写出程序运行的结果,即输入数据是什么,输出数据是什么,分析结果是否正确,如果不正确是什么原因。
实验二线性表实验一、实验目的1、掌握建立顺序表的基本方法。
2、理解和掌握顺序表元素查找算法。
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作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.了解顺序表的结构特点及有关概念,掌握顺序表建立、插入、删除的基本操作算法。
2.了解单链表的结构特点及有关概念,掌握单链表建立、插入、删除的基本操作算法。
[实验内容]1.顺序表的实践。
1)建立4个元素的顺序表list[]={2,3,4,5},实现顺序表建立的基本操作。
2)在list[]={2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践。
1)建立一个包括头结点和3个结点的(4,2,1)的单链表,实现单链表建立的基本操作。
2)在已建好的单链表中的指定位置(x=2)插入一个结点3,实现单链表插入的基本操作。
3)在一个包括头结点和4个结点的(4,2,3,1)的单链表的指定位置删除一个结点,实现单链表删除的基本操作。
[实验要点及说明]线性表(linear list)是n(n≥0)个数据元素a1,a2,…a n组成的有限序列。
其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。
通常将非空的线性表记为(a1,a2,…,a n),其中的数据元素a i(1≤i≤n)是一个抽象的符号,a i是第i个数据元素,称i为数据元素a i在线性表中的位置。
其具体含义在不同情况下是不同的,即它的数据类型可以根据具体情况而定,本书中,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。
顺序表也称为线性表的顺序存储结构。
其存储方式为:在内存中用一组地址连续的存储单元依次存储线性表的数据元素,但该连续存储空间的大小要大于或等于顺序表的长度。
一般让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。
可定义顺序表如下:#define maxnumelemtype list[maxnum];int num=-1;线性表的链式存贮结构,也称为链表。
《数据结构》实训指导书
《数据结构》实训指导书实训一线性表基本操作算法设计一、实训目的与要求1、掌握线性表的顺序存储结构的实现及其基本操作的算法设计;2、掌握线性表的链式存储结构的实现及其基本操作的算法设计;3、掌握算法转化为C程序的方法。
二、实训内容1、根据线性表L=(a,b,c,d,e,f),编写程序建立其顺序存储结构并完成插入或删除操作。
2、根据线性表L=(a,b,c,d,e,f),编写程序建立其链式存储结构并完成插入或删除操作。
三、实训步骤1、根据算法设计编写源程序;2、输入并编辑源程序;3、运行并分析程序;四、实训总结与体会[根据本次实训过程,总结你对线性表基本操作算法设计的基本体会]实训二栈和队列基本操作的算法设计一、实训目的与要求1、掌握栈的基本操作算法设计的实现;2、掌握队列的基本操作算法设计的实现。
二、实训内容1、根据栈S=(a,b,c,d,e),建立其顺序存储结构或链式存储结构,并完成对该栈的进栈或出栈操作;2、根据队列Q=(a,b,c,d,e),建立其顺序存储结构或链式存储结构,并完成对该队列的进队或出队操作;三、实训步骤1、根据算法编写源程序;2、输入并编辑源程序;3、调试、分析程序。
四、实训总结[根据本次实训内容和过程,总结你对栈、队列的基本操作算法设计的体会]实训三二叉树的遍历算法设计一、实训目的与要求1、掌握二叉树的链式存储结构的算法实现;2、掌握遍历二叉树的算法实现。
二、实训内容1、根据算法编写程序建立下图所示二叉树的链式存储结构(建立二叉链表);2、根据算法编写程序完成对该二叉树的中序遍历(或先序遍历、后序遍历)。
三、实训步骤1、根据算法编写程序;2、输入并编辑程序;3、运行并分析程序。
四、实训总结与体会【根据本次实训内容及过程,简述对二叉树存储结构的实现及遍历二叉树算法设计的体会】实训四图的存储及遍历算法设计一、实训目的与要求1、掌握图的邻接矩阵、邻接表存储结构的算法实现;2、掌握图的遍历算法设计。
数据结构实验指导书及其答案pdf
引言概述正文内容
1.实验环境配置
1.1硬件要求
计算机硬件配置要求
操作系统要求
附加硬件设备要求(如虚拟机等)
1.2软件要求
编程语言要求(如C/C++、Java等)开发环境配置(如IDE、编译器等)1.3实验库和工具
实验需要使用的库文件和工具
如何获取和配置实验库和工具
2.实验内容介绍
2.1实验目标和背景
数据结构实验的作用和意义
实验背景和相关应用领域介绍
2.2实验概述
实验内容的大致流程和步骤
实验中可能遇到的问题和挑战
2.3实验要求
对学生实验流程和实验结果的要求
实验过程中需要注意的事项和技巧
3.实验步骤
3.1实验准备
配置实验环境
获取实验所需数据和文件
3.2实验具体步骤
根据实验要求将数据结构知识应用到具体问题中根据实验要求实现相应的算法和数据结构
3.3实验示例代码
提供示例代码以供学生参考和学习
解析示例代码中的关键步骤和实现细节
4.实验答案
4.1实验题目
实验题目及相关说明
确定实验的具体要求和目标
4.2实验答案解析
对实验答案的具体实现进行解析
对实验中可能遇到的问题和错误进行分析和解决4.3实验答案示例
提供实验答案的示例代码
解析实验答案中的关键实现步骤和说明
5.实验总结
5.1实验成果评估
对学生实验成果进行评估
分析实验结果的优点和不足
5.2实验心得
学生对本次实验的收获和感想
学生对未来实验的建议和展望
总结。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2实验报告(文档)书写规范实验报告(文档)应包括以下7个方面的内容:1、问题分析根据对实验任务的理解,以无歧义的陈述说明程序设计的任务,强调的是程序要做什么。
指出解决问题的关键步骤,如果问题复杂,应将问题分解成若干个子问题。
明确规定:(1)本实验的任务以及程序所能达到的功能;(2)完成该任务需要解决的关键问题;(3)程序设计中输入数据的类型、形式及输入值的范围;(4)设置测试数据:包括正确的输入及预计的输出结果和含有错误的输入及预计输出结果。
2.概要设计针对问题分析中提出的关键问题进行分析(可以列举实例进行分析),从而总结出关键问题的解决思路,给出解决关键问题的算法思想。
说明本程序中用到的所有程序模块、各程序模块之间的层次(调用)关系以及主程序的流程,各程序模块使用中文名称即可。
3.详细设计根据概要设计中提出的关键问题的解决思路,设计本程序中用到的所有数据结构,要求做到:(1)在所设计的数据结构下分析关键问题的具体解决方案和步骤,给出相应的用类C 语言描述的算法;(2)分析设计程序中需要用到的变量、全局变量及其数据类型定义;(3)设计程序中的所有模块(自定义函数和主函数),通过分析定义函数的类型、描述函数参数、说明函数名称,并给出相应类C语言描述的算法(类C语言算法达到的详细程度建议为:按照该算法可以直接写出高级程序设计语言程序);(4)画出函数和过程的调用关系图。
4.调试分析程序调试主要实现程序的语法错误检查和功能性错误检查。
调试最好分模块进行,自底向上,即先调试低层过程或函数。
在实验报告中应有如下内容:(1)记录调试过程中遇到的问题及其解决方案,如果由此反映出程序设计的不足,应对设计与实现进行回顾讨论和分析,并修正;(2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(3)经验和体会等。
5.测试结果将程序的测试结果截图,展示出你的测试过程和结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于问题分析中所列。
6.附录带注释的源程序。
如果提交源程序电子档,可以只列出程序文件名的清单。
值得注意的是,实验报告文档的前三部分要在程序开发的过程中逐渐充实形成,而不是最后补写。
实验一算法设计:(1)用指向指针的指针的方法对n个整数排序并输出。
要求将排序单独写成一个函数,n 和各整数在主函数中输入,最后在主函数中输出。
(2)编程求出10000以内的所有符合如下条件的数:其高位数字小于低位数字。
如25,349,2468等,但32,845不符合条件。
(3)编程求出数列的所有升或降的最大子序列。
如数列(1,20,30,12,3,5,7,4,6,100,11,8)的所有升或降的最大子序列如下:(1,20,30),(30,12,3),(3,5,7),(7,4),(4,6,100),(100,11,8)实验二顺序表实验【实验任务】1、程序验证(1)建立含有若干个元素的顺序表,并实现顺序表的插入、删除、查找等操作。
(2)阅读下列程序,指出算法的功能,写出其运行结果,并通过运行来验证。
#include “malloc.h”#define maxlen 50typedef struct{int data[maxlen];int last;3我}Sequenlist;Sequenlist *ABC(Sequenlist *A , Sequenlist *B){int i, j;Sequenlist *C;C = malloc(sizeof(Sequenlist));C->last = -1;for(i=0; i<=A->last; i++)for(j=0; j<=B->last; j++) {if(A->data[i]= = B->data[j]) {C->last++;C->data[C->last] = A->data[i];break;}return C;}Sequenlist *SqLset( ){Sequenlist *L;int i;L=malloc( sizeof(Sequenlist));L->last = -1;scanf(“%d”, &i); //输入表长if( i>0) {for(L->last=0; L->last <i; L->last ++)scanf(“%d”, & L->data[L->last]);L->last--;}return ( L);}main( ) {Sequenlist *A , *B, *C;int i;A = SqLset( );B = SqLset( );C = ABC(A, B);for(i=0; i<=C->last; i++)printf(“%4d”, C->data[i] );}(3)下面算法的预定功能是实现顺序表的倒置,试检查其中是否有错;若有错,指出错误所在,并修改之,然后通过运行来验证。
#include “malloc.h”#define maxlen 50typedef struct{int data[maxlen];int last;}Sequenlist;Sequenlist *SqLset( ){Sequenlist *L;int i;L=malloc( sizeof(Sequenlist));L->last = -1;scanf(“%d”, &i); //输入表长if( i>0) {for(L->last=0; L->last <i; L->last ++)scanf(“%d”, & L->data[L->last]);}return ( L);}Sequenlist *reverse(Sequenlist *L) {int i, j, x;for(i=0, j=L->last-i+1; i<= j; i ++ ) {x = L->data[i]; L->data[i]= L->data[j]; L->data[j]=x;}return ( L);}main( ) {Sequenlist *A;int i;A = SqLset( );for(i=0; i<=A->last; i++)printf(“%4d”, A->data[i] );printf(“\n”);A = Sequenlist ( );for(i=0; i<=A->last; i++)printf(“%4d”, A->data[i] );printf(“\n”);}2、算法填空请在下面算法的空格处填入适当内容,以使算法能求出顺序表中的最大和最小值,并通过运行来验证。
#include “malloc.h”#define maxlen 50typedef struct{int data[maxlen];int last;}Sequenlist;Sequenlist *SqLset( ){Sequenlist *L;int i;L=malloc( sizeof(Sequenlist));L->last = -1;scanf(“%d”, &i); //输入表长if( i>0) {for(L->last=0; L->last <i; L->last ++)scanf(“%d”, & L->data[L->last]);}return ( L);}void maxmin(Sequenlist *L) {int min, max, i;if( ) {max = min = L->data[0];for(i =1; i <= ; i ++) {if( max < L->data[i])max = L->data[i];if( min > L->data[i])min = L->data[i];}printf(“max=%d, min= %d\n”, max, min );}main( ) {Sequenlist *A;A = SqLset( );maxmin(A);}3、算法设计(1)设计算法实现删除顺序表中多余重复元素。
如:对于顺序表(1,2,3,1,3,4,3,5),删除第四个元素1及第五、第七个元素3。
(2)设计算法,实现在一个递增有序的顺序表的适当位置插入元素x,使得该顺序表仍然递增有序。
分析算法的时间复杂度。
实验三链表实验【实验任务】1、程序验证建立含有若干个元素的链表,并实现链表的插入、删除、查找等操作2、算法填空(1)下面建立以head为头指针的单链表,完善该算法,并输出表中元素。
已知单链表节点类型为:typedef struct node{int data;struct node *next;}LinkList;LinkList *create ( ){LinkList *p,*q;int k;q=head;scanf (“%d”,&k);while( k>0){;;;;scanf (“%d”,&k);}q->next = NULL;}(2)已给如下关于单链表的类型说明:typedef struct node{int data;struct node *next;}LinkList;以下程序采用链表合并的方法,将两个已排序的单链表合并成一个链表而不改变其排序性(升序),这里两链表的头指针分别为p和q。
完善该算法,输出合并后表中的元素。
LinkList *mergelink(LinkList *p,LinkList *q){LinkList *h,LinkList *r;;h->next= NULL;r=h;while( p!=NULL&&q!=NULL){if (p->data<=q->data){;r=p;p=p->next;}else{ ;r=q;q=q->next;}}if (p= =NULL) r->next=q;else ;return h;}(3)la为指向带头节点的单链表的头指针,本算法在表中第i个元素之前插入元素b。
完善该算法,并通过运行来验证。
LinkList *insert (LinkList *la,int i,datatype b){LinkList *p,*s;int j;p= ;j= ;while ( p!=NULL && ) {p = ;j=j+1;}if (p= =NULL || ) error (‘No this position’)else{s = malloc ( sizeof (LinkList) );s->data=b;s->next=p->next;p->next=s;}return la;}(4)已知双链表中节点的类型定义为:typedef struct Dnode{int data;struct Dnode *prior,*next;}DLinkList ;如下过程将在双链表第i个节点(i>=0)之后插入一个元素为x的节点。