算法与数据结构实验册
数据结构与算法数据结构与算法实验

数据结构与算法数据结构与算法实验一、实验目的二、实验内容(1)数据结构的实现:例如,链表、栈、队列、树、图等。
学生需要实现这些数据结构的基本操作,如插入、删除、遍历等。
(2)算法设计与分析:例如,排序算法、查找算法、图算法等。
学生需要实现并分析这些算法的时间复杂度和空间复杂度。
(3)实验报告的撰写:学生需要按照实验要求撰写实验报告,包括实验目的、实验内容、实验结果等。
实验报告可以帮助学生更好地总结和理解实验过程中遇到的问题和解决方法。
三、实验要求在进行数据结构与算法实验时,学生需要注意以下几个要求:(1)合理安排时间:数据结构与算法实验需要一定时间来完成,学生需要提前规划好时间,合理安排实验的进行。
(2)认真实验:学生在进行实验时需要认真对待每一步操作,确保实验过程的准确性和完整性。
(3)作业自主完成:学生需要独立完成实验作业,只有通过自己的努力才能够真正掌握数据结构与算法的知识。
(4)及时求助:如果在实验过程中遇到问题,学生应该及时向老师或同学求助,以免耽误实验的进行。
四、实验感想数据结构与算法实验是非常有收获的一门课程。
通过实验,我不仅加深了对数据结构与算法的理解,还学会了如何应用它们来解决实际问题。
实验中我遇到了一些困难,但通过不断的思考和尝试,我最终找到了解决问题的方法。
实验报告的撰写也让我更好地总结和理解实验的过程。
通过实验,我发现数据结构与算法的学习并不是一蹴而就的,需要不断地练习和思考。
只有在实践中才能真正掌握它们。
同时,数据结构与算法实验也锻炼了我的动手能力和解决问题的能力,提高了我的编程水平和分析思维。
总而言之,数据结构与算法实验是一门非常重要和有趣的课程。
通过实验,我们可以更好地理解和应用数据结构与算法,提高自己的编程能力和解决问题的能力。
希望今后我们能够不断地学习和实践,不断提高自己的数据结构与算法水平。
算法与数据结构实验报告

算法与数据结构实验报告算法与数据结构实验报告1. 实验目的1.1 理解算法与数据结构的基本概念;1.2 掌握常见的算法与数据结构的设计与实现;1.3 进一步提高编程能力与问题求解能力。
2. 实验环境2.1 操作系统:(填写操作系统信息)2.2 开发工具:(填写开发工具信息)2.3 编程语言:(填写编程语言信息)3. 实验内容3.1 实验一:线性数据结构3.1.1 数组3.1.1.1 实现一个动态数组类,包含插入、删除、查找等基本操作3.1.1.2 对动态数组进行排序3.1.2 链表3.1.2.1 实现一个单链表类,包含插入、删除、查找等基本操作3.1.2.2 反转链表3.1.3 栈与队列3.1.3.1 实现一个栈类,包含入栈、出栈等基本操作3.1.3.2 实现一个队列类,包含入队、出队等基本操作3.2 实验二:树与图3.2.1 二叉树3.2.1.1 实现一个二叉树类,包含插入、删除、查找等基本操作3.2.1.2 遍历二叉树(前序、中序、后序)3.2.2 图3.2.2.1 实现一个图类,包含插入节点、添加边等基本操作3.2.2.2 深度优先搜索(DFS)与广度优先搜索(BFS)4. 实验步骤4.1 实验一4.1.1 数组4.1.1.1 分析动态数组类的设计与实现步骤4.1.1.2 编写动态数组类的代码4.1.1.3 编写动态数组类的测试代码4.1.1.4 进行动态数组类的功能测试与性能测试4.1.2 链表4.1.2.1 分析单链表类的设计与实现步骤4.1.2.2 编写单链表类的代码4.1.2.3 编写单链表类的测试代码4.1.2.4 进行单链表类的功能测试与性能测试4.1.3 栈与队列4.1.3.1 分析栈类的设计与实现步骤4.1.3.2 编写栈类的代码4.1.3.3 编写栈类的测试代码4.1.3.4 进行栈类的功能测试与性能测试4.2 实验二4.2.1 二叉树4.2.1.1 分析二叉树类的设计与实现步骤4.2.1.2 编写二叉树类的代码4.2.1.3 编写二叉树类的测试代码4.2.1.4 进行二叉树类的功能测试与性能测试4.2.2 图4.2.2.1 分析图类的设计与实现步骤4.2.2.2 编写图类的代码4.2.2.3 编写图类的测试代码4.2.2.4 进行图类的功能测试与性能测试5. 实验结果与分析(根据具体实验结果进行填写)6. 实验总结(总结实验过程中遇到的问题,以及对算法与数据结构的理解与应用)7. 本文档涉及附件(列出本文档所涉及的附件名称及说明)8. 法律名词及注释(列出本文档所涉及的法律名词及其详细解释)。
数据结构与算法实习-实验指导书

数据结构与算法课程实习实验指导书上海第二工业大学计算机与信息学院软件工程系目录实验一顺序表的基本操作 (2)实验二链表的基本操作 (3)实验三二叉树的基本操作 (4)实验四综合应用 (5)附录A 实验报告示例 (9)附录B 实验报告封面、评语得分表 (12)附录C 最后要提交的文档形式 (15)实验一顺序表的基本操作【实验目的】1、掌握顺序存储的概念,学会对顺序表的基本操作。
2、加深对顺序存储数据结构的理解,逐步培养解决实际问题的能力。
【实验性质】设计型实验【实验内容】1、实现顺序表显示;2、实现顺序表插入;3、实现顺序表查找(显示比较次数);4、实现顺序表删除(显示移动次数);5、实现顺序表排序(分别实现简单选择、快速,显示比较次数、移动次数);6、实现顺序表的折半查找(显示比较次数);7、编程实现一个顺序表的就地逆置,即利用原表的存储空间将顺序表逆置;8、顺序表有序插入(显示比较次数、移动次数),屏幕提示后,从键盘输入一个元素值,在经过排序的线性表中插入这个元素;屏幕显示比较次数和移动次数,应有溢出判断和报告;9、要求以较高的效率实现删除顺序表中元素值在x到y(x和y自定)之间的所有元素;10、编程实现将两个非递减的顺序表进行合并,要求同样的数据元素只出现一次;*11、编程实现顺序表的shell排序(步长为5,3,1);*12、编程实现堆排序算法;*13、利用三元组顺序表存储矩阵,实现矩阵的转置(请独立写程序实现)。
【实验环境】VC++ 6.0【实验要求】将如上文件保存在命名为“学号+姓名”的文件夹中并上传到指定的服务器。
实验二链表的基本操作【实验目的】1、掌握链表的概念,学会对链表进行操作。
2、加深对链式存储结构的理解,逐步培养解决实际问题的编程能力。
【实验性质】设计型实验【实验内容】1、实现单链表的创建;2、实现单链表的显示;3、实现单链表的查找(显示比较次数);4、实现单链表的插入;5、实现单链表的删除(显示比较次数);6、对已创建的链表(数据不限)进行直接插入排序;7、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等;8、生成有序的两个单链表A和B(链表的数据和个数自定),其首结点指针分别为a 和b,要求将两个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复;9、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序;10、请编程实现链栈的基本操作函数,并通过调用这些基本函数,实现十进制和八进制转换的功能。
算法与及数据结构实验报告

第一学期实验报告课程名称:算法与数据结构实验名称:城市链表一、实验目的本次实验的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。
同时,通过本次实验帮助学生复习高级语言的使用方法。
二、实验内容(一)城市链表:将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4(正确的结果应为6,1,4,7,2,3,5)。
三、实验环境VS2010 、win8.1四、实验结果(一)城市链表:(1)创建城市链表;(2)给定一个城市名,返回其位置坐标;(3)给定一个位置坐标P 和一个距离D,返回所有与P 的距离小于等于D 的城市。
(4)在已有的城市链表中插入一个新的城市;(5)更新城市信息;(6)删除某个城市信息。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4输出6,1,4,7,2,3,5。
五、附录城市链表:5.1 问题分析该实验要求对链表实现创建,遍历,插入,删除,查询等操作,故使用单链表。
5.2 设计方案该程序大致分为以下几个模块:1.创建城市链表模块,即在空链表中插入新元素。
故创建城市链表中包涵插入模块。
2.返回位置坐标模块。
3.计算距离模块4.插入模块。
5.更新城市信息模块6.删除信息模块。
5.3 算法5.3.1 根据中心城市坐标,返回在距离内的所有城市:void FindCityDistance(citylist *L){//根据距离输出城市……//输入信息与距离L=L->next;while(L != NULL){if(((L->x-x1)*(L->x-x1)+(L->y-y1)*(L->y-y1)<=dis *dis)&&(((L->x-x1)+(L->y-y1))!=0 )){printf("城市名称%s\n",L->Name);printf("城市坐标%.2lf,%.2lf\n",L->x,L->y);}L=L->next;}}该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用横坐标差的平方+纵坐标差的平方<= 距离的平方判定。
算法与及数据结构实验报告

算法与及数据结构实验报告算法与数据结构实验报告一、实验目的本次算法与数据结构实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见算法和数据结构的基本原理、特性和应用,提高我们解决实际问题的能力和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
同时,为了进行算法性能的分析和比较,使用了 Python 的 time 模块来计算程序的运行时间。
三、实验内容1、线性表的实现与操作顺序表的实现:使用数组来实现顺序表,并实现了插入、删除、查找等基本操作。
链表的实现:通过创建节点类来实现链表,包括单向链表和双向链表,并完成了相应的操作。
2、栈和队列的应用栈的实现与应用:用数组或链表实现栈结构,解决了表达式求值、括号匹配等问题。
队列的实现与应用:实现了顺序队列和循环队列,用于模拟排队系统等场景。
3、树结构的探索二叉树的创建与遍历:实现了二叉树的先序、中序和后序遍历算法,并对其时间复杂度进行了分析。
二叉搜索树的操作:构建二叉搜索树,实现了插入、删除、查找等操作。
4、图的表示与遍历邻接矩阵和邻接表表示图:分别用邻接矩阵和邻接表来存储图的结构,并对两种表示方法的优缺点进行了比较。
图的深度优先遍历和广度优先遍历:实现了两种遍历算法,并应用于解决路径查找等问题。
5、排序算法的比较插入排序、冒泡排序、选择排序:实现了这三种简单排序算法,并对不同规模的数据进行排序,比较它们的性能。
快速排序、归并排序:深入理解并实现了这两种高效的排序算法,通过实验分析其在不同情况下的表现。
6、查找算法的实践顺序查找、二分查找:实现了这两种基本的查找算法,并比较它们在有序和无序数据中的查找效率。
四、实验步骤及结果分析1、线性表的实现与操作顺序表:在实现顺序表的插入操作时,如果插入位置在表的末尾或中间,需要移动后续元素以腾出空间。
删除操作同理,需要移动被删除元素后面的元素。
在查找操作中,通过遍历数组即可完成。
算法与数据结构-上机实验大纲

《算法与数据结构》实验(上机)大纲课程名称:算法与数据结构上机学时:16学时适用专业:软件工程一、实验(上机)课程的性质、目的与任务:《算法与数据结构》是软件工程专业的一门专业必修课,是理论与实践并重的课程。
实验是该课程实践教学环节的重要环节,它的内容覆盖了算法与数据结构的各个主要部分。
通过实验可以加深对数据结构基本概念、基本理论的理解,使学生巩固和运用所学知识以解决实际的具体问题,同时提高程序设计和实际操作的能力,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
原则上要求学生针对实际问题进行数据结构设计、算法设计、编程调试、算法测试和优化,获得运行结果,并作为课程考核内容的一部分,也为后续课程的学习打下良好的基础。
二、实验(上机)报告内容⒈问题描述:包括需求分析、实现目标、任务、条件和约束的描述。
充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。
⒉设计:包括概要设计和详细设计在概要设计中,第一步先进行数据结构设计:针对要求解决的问题,考虑各种可能的数据结构,还可以根据算法的时间复杂度和空间复杂度一起考虑,以确定最合适的数据结构,主要描述逻辑结构。
第二步进行关键算法设计:对每个算法的功能及初始条件和操作结果认真分析确定,并针对模块化开发的特点,自顶向下分解成若干顺序模块,确定模块间的相互关系以及模块之间的信息交换问题。
第三步设计主控模块及功能模块层次间的结构;在详细设计中,第一步对数据结构的存储结构进行描述,对数据结构的逻辑结构和物理结构进行定义,掌握其特点和映射关系。
第二步对每个算法进行实现,包括输入、处理和输出的描述。
程序代码尽可能的多加注释,用C语言实现。
3.测试:准备典型测试数据和测试方案,对测试结果进行分析与讨论,对测试过程中遇到的主要问题及所采用的解决措施进行总结,以优化算法。
⒋使用说明和作业小结(如果有):⑴使用说明主要描述如何使用你的程序以及使用时的主要事项;⑵在小结中说明实验过程中碰到的问题,算法的改进思想、经验和体会。
算法与数据结构实验指导概述

实验目的:
1. 掌握顺序表的查找方法,尤其是二分查找方法。 2. 掌握二叉排序树的建立及查找。
实验任务:
3. 对下列数据表,分别采用二分查找算法实现查找,给出查找过程依次 所比较的元素(的下标),并以二分查找的判定树来解释。
实验测试数据: 数据表为
(1,2,3,4,6,7,8,9,10,11,12,13,17,18,19,20,24,25,26,30,35,40,4 5,50,100) 查找的元素分别为: 2,8,20, 30,50,5,15,33,110
测试数据:
数组元素分别为: (180,203,32,46,25,76,17,58,99,100,11,102,13,54,75,6,27,18 ,19,29,2,82)
2. 实现堆排序算法,给出排序结果。 测试数据:
(106,213,325,446,579,654,721,870,917,510,21,632,73,14,815, 18,619,720,21,808,923,25,26)
3.求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链
表L3。 实验测试数据基本要求:
第一组数据: 第一个链表元素为 (1,3,6,10,15,16,17,18,19,20)第 二个链表元素为 (1,2,3,4,5,6,7,8,9,10,18,20, 30)
第二组数据: 第一个链表元素为 (1,3,6,10,15,16,17,18,19,20) 第二个链表元素为 (2,4,5,7,8,9,12,22)
4. 设计出在二叉排序树中插入结点的算法,在此基础上实现构建二叉排 序树的算法,并给出其中序遍历序列。
实验测试数据: 构建二叉排序树的输入序列如下:100,150,120,50,70,60,80,
算法与数据结构实验报告

算法与数据结构实验报告算法与数据结构实验报告1.引言该实验报告旨在介绍算法与数据结构实验的设计、实施和结果分析。
本章节将概述实验的背景和目的。
2.实验设计2.1 实验背景在本节中,我们将介绍该实验的背景和应用领域,以便读者能够更好地理解实验的重要性。
2.2 实验目的在本节中,我们将详细介绍该实验的目的和预期的成果,以便读者明确实验的研究问题和目标。
3.算法与数据结构概述3.1 算法定义在本节中,我们将简要介绍算法的概念,并讨论其在实验中的应用。
3.2 数据结构定义本节将简要介绍数据结构的概念,并说明其在算法中的作用。
4.算法实现4.1 实验环境和工具本节将介绍实验所使用的环境和工具,包括编程语言、开发平台和相关库。
4.2 算法逻辑设计在本节中,我们将详细描述所选算法的逻辑设计,包括输入、处理和输出过程。
4.3 数据结构设计本节将详细介绍所选算法中使用的数据结构设计,包括数组、链表、栈等。
4.4 算法实现步骤在本节中,我们将逐步介绍算法的实现步骤,包括代码编写和算法调试。
5.实验结果与分析5.1 实验数据收集在本节中,我们将详细介绍实验数据的收集以及所采用的评估指标。
5.2 实验结果展示本节将展示实验结果的统计数据、图表和其他可视化形式,以便读者更好地理解实验结果。
5.3 结果分析在本节中,我们将对实验结果进行分析,讨论其优势、局限性以及可能的改进方向。
6.总结与展望6.1 实验总结本节将对整个实验过程进行总结,并概括实验的主要发现和成果。
6.2 实验展望在本节中,我们将探讨实验结果的未来发展方向,并提出后续研究的建议和展望。
附件:1.数据集:包含实验中使用的原始数据集2.源代码:包含实验所编写的算法代码和实现注释:1.算法:指计算机科学中用来解决问题的可执行指令序列。
2.数据结构:指组织和存储数据的方式,以便能够高效地访问和处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告书写要求实验报告原则上要求学生手写,要求书写工整。
若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。
纸张一律采用A4的纸张。
实验报告书写说明实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。
各院部可根据学科特点和实验具体要求增加项目。
填写注意事项(1)细致观察,及时、准确、如实记录。
(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。
(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。
实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称:顺序表实验学时: 2 同组学生姓名:全班同学实验地点: 1318 实验日期: 10 月14号实验成绩:批改教师:批改时间:实验1 顺序表一、实验目的和要求掌握顺序表的定位、插入、删除等操作。
二、实验仪器和设备Turbo C 2.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)编写程序建立一个数续表,并逐个输出顺序表中所有数据元素的值。
编写主函数测试结果。
(2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。
如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。
编写主函数测试结果。
(3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。
解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。
(4)删除顺序表中所有等于X的数据元素。
2、选做题(5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。
程序清单:第一题:#include<stdio.h>#define maxsize 100 typedef struct{int datatype [maxsize]; int last;}sequenlist; void main(){sequenlist a={{1,2,3,4},4};for(int i=0;i<st;i++){printf("%d ",a.datatype[i]);}}第二题:#include<stdio.h>#define maxsize 100typedef struct{int datatype[maxsize];int last;}sequenlist;int search(sequenlist a,int x){ for(int i=0;i<st;i++){if(a.datatype[i]==x){return(i);}}return (-1);}void main(){sequenlist a={{1,2,3,5,6},5};int b=1;printf("%d",search(a,b));}第三题:#include <stdio.h>#define maxsize 100typedef struct{int datatype[maxsize];int last ;}sequenlist;sequenlist insert(sequenlist a,int x){for(int i=0;i<st;i++){if(a.datatype[i]>=x){for(intj=st;j>i;j--){a.datatype[j]=a.datatype[j-1];}a.datatype[i]=x;st=st+1;return (a);}}return a;}void main(){sequenlista={{1,2,3,4,5,6},6};sequenlist c;int b=1;c=insert(a,b);for(int i=0;i<st;i++){printf("%d",c.datatype[i]);}}第四题:#include<stdio.h>#define maxsize 100typedef struct {int datatype[maxsize];int last;}sequenlist;sequenlist dele(sequenlist a,int x){for(int i=0;i<st;i++){if(a.datatype[i]==x){for(intj=i;j<st-1;j++){a.datatype[j]=a.datatype[j+1];}st=st-1;}}return a;}void main(){sequenlist a={{1,2,3,4,5},5};sequenlist b;int x=4;b= dele(a,x);for(int i=0;i<st;i++){printf("%d",b.datatype[i]);}}第五题:#include<stdio.h>#define maxsize 100typedef struct {int datatype[maxsize];int last;}sequenlist;sequenlist combine(sequenlist a,sequenlist b){int i=0;sequenlist c;st =0;int j=st-1;int h=st-1;while(j>=0 && h>=0){if(a.datatype[j]>=b.datatype[h ]){c.datatype[i++]=a.datatype[j--];st++;}else{c.datatype[i++]=b.datatype[h--];st++;}} if(j==-1 && h>=0){while(h>=0){c.datatype[i++]=b.datatype[h--];st++;}return c;}else if(j>=0 && h==-1){while(j>=0){c.datatype[i++]=a.datatype[j--];st++;}return c;}return c;}void main(){sequenlist a={{1,3,4,5,7,8},6};sequenlist b={{2,3,4,5,6},5};sequenlist c=combine(a,b);for(int i=0;i<st;i++){printf("%d ",c.datatype[i]);}}四、实验结果与分析(程序运行结果及其分析)第一题:1 2 3 4此题即直接输出第二题:此题输出1的位置为0第三题:1 1234 5此题插入一个新节点1后有序输出第四题:1 2 3 5此题删除一个节点4第五题:8 7 6 5 4 4 3 3 2 1此题用一个新的顺序表存储新的序列五、实验体会(遇到问题及解决办法,编程后的心得体会)我认为第三题和第五题比较有挑战性,第三题写了 insert函数,但此时实参给实参的传递是值传递,因此要在函数体内写输出函数或把新的书序表返回给主函数;第五题有很多易错地方,要做到仔细细心!第五题的解题思路是:分别把两个书序表从后往前比较,谁大谁的值就赋值新的序列表,并且把记录它下标的值减一;如果有一个序列表的值已经赋值完毕,就把另一个序列表的剩下的值从后往前依次赋值给新的序列表。
实验项目名称:单链表实验学时: 2 同组学生姓名:全班同学实验地点: 1318 实验日期: 10月21号实验成绩:批改教师:批改时间:实验2 单链表一、实验目的和要求1、实验目的掌握单链表的定位、插入、删除等操作。
2、实验要求(1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。
(2)链表不能实现直接定位,一定注意指针的保存,防止丢失。
二、实验仪器和设备Turbo C 2.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)编写程序建立一个单链表,并逐个输出单链表中所有数据元素。
(2)在递增有序的单链表中插入一个新结点x,保持单链表的有序性。
解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。
(3)编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。
2、选做题已知指针LA和LB分别指向两个无头结点单链表的首元结点。
要求编一算法实现,从表LA中删除自第i个元素起共len个元素后,将它们插入到表LB中第j个元素之前。
程序清单:第一题:#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node *next;}linklist;void main(){linklist *head,*r,*p;int a;head=malloc(sizeof(linklist)); r=head;scanf("%d",&a);while(a!=0){p=malloc (sizeof(linklist));p->data=a;r->next=p;r=p;scanf("%d",&a);}r=head->next;while(r!=NULL){printf("%d",r->data);r=r->next;}}第二题:#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node *next;}linklist;void main(){linklist *head,*r,*p,*q;int a;head=malloc(sizeof(linklist));r=head;printf("请输入原链表的值:(输入0时将结束输入)\n");scanf("%d",&a);while(a!=0){p=malloc(sizeof(linklist));p->data=a;r->next=p;r=p;scanf("%d",&a);}r->next=NULL; p=malloc(sizeof(linklist));printf("请输入插入节点的值:\n");scanf("%d" ,&p->data);p->next=NULL;r=head->next;q=head;if(head->next ==NULL){head->next =p;}else{while( r!=NULL && r->data<p->data){q=q->next;r=r->next;}p->next =r;q->next=p;}//q指向r的前一个节点r=head->next;printf("插入后的链表是:\n");while(r!=NULL){printf("%d ",r->data);r=r->next;}}第三题:#include "stdio.h"#include "stdlib.h"typedef struct node{int data;struct node *next;}linklist;main(){int a;linklist *head,*s,*r,*p,*q,*t; head=malloc(sizeof(linklist)); r=head;printf("Input some numbers:"); scanf("%d",&a);while(a!=0){s=malloc(sizeof(linklist));s->data=a;r->next=s;r=s;scanf("%d",&a);}r->next=NULL;printf("\n The linklist before changed is:\n ");p=head->next;while(p){printf("%d",p->data);p=p->next;}p=head->next;q=p->next;while(q!=NULL){t=q->next;q->next=p;p=q;q=t;}head->next->next=NULL;head->next=p; printf("\nAfter changed:\n");p=head->next;while(p!=NULL){printf("%d",p->data);p=p->next;}}第四题:#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node *next;}linklist;linklist * fun(linklist *a,linklist *b,int i,int len,int j){linklist *p,*q,*r,*z;int h;p=a;if(i==1){q=p;for(h=1;h<=len;h++){q=q->next;//q指向第len+1个节点}a=q;}else{for(h=1;h<i-1;h++){p=p->next;//p指向第i-1个节点}q=p->next;for(h=1;h<=len;h++){q=q->next;//q指向第len+1个节点}p->next=q;//链表a中已经删除了len个节点}p=b;q=a;while(q->next!=NULL){q=q->next;//q指向a的尾节点;scanf("%d",&h1);printf("请输入第从一条链的第i个元素删除几个元素\n");scanf("%d",&h2);printf("请输入在第二条链的第几个元素前开始插入\n");scanf("%d",&h3);b=fun(a,b,h1,h2,h3);printf("修改后的链表为:\n"); while(b!=NULL){printf("%d ",b->data);b=b->next ;}}四、实验结果与分析(程序运行结果及其分析)第一题:1 2 3 4 5此题较简单建立链表后可以直接输出(运用指针后移直至指针指向空)第二题:请输入原链表的值:(输入0时将结束输入)1 2 3 4 5 0请输入插入节点的值:2插入后的链表是:1 2 2 3 4 5此题要思考全面特别是原链表为空或插入节点比原链表的任意一个节点都大时要考虑到!第三题:请输入单链表:(以0结束)1 2 3 4 5 0逆置后的链表是:5 4 3 2 1此题用p指向一个节点q指向p的前一个节点,p的指针域指向q.此时应该用一个指针记录p的后继节点,因为一旦p的指针指向q时将找不到p的后继节点!第四题:请输入要建立的链表:(以0结束)1 2 3 4 5 0请输入要建立的链表:(以0结束)1 2 3 4 5 0请输入在第一条链的第几个元素开始删除:1请输入从第一条链的第i个元素删除几个元素:4修改后的链表为:5 1 2 3 4 5五、实验体会(遇到问题及解决办法,编程后的心得体会)本次试验最要花心思的是第四题因为其需要分情况讨论,比如是从第一条的第一个元素开始删除还是从其他元素。