头歌平台数据结构与算法 单链表实验 第1关:倒置链表
- 任务描述
- 相关知识
- 实验目的
- 实验任务
- 实验说明
- 编程要求
- 测试说明
任务描述
本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证。
相关知识
实验目的
- 理解线性表的链式存储结构;
- 熟练掌握动态链表结构及有关算法的设计;
- 根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。
线性表是软件设计中最常用的数据结构,是实际应用领域中许多具体数据的抽象表示形式,是软件开发过程中常见的基本结构之一。按照教学要求,在实现时不仅需要实现数据的存储,而且要设计出针对所选择或设计的存储结构的运算集合,在此基础上,还要能根据具体问题的需要设计出最合理的问题求解方法或算法。
线性表的链式存储结构是对线性表的一种存储形式,其中元素之间的次序关系是依靠指针来表示的,其优点是在插入和删除元素时不必移动元素,但不能直接存取元素。动态链表存储结构可以不受数据规模的约束,也就是不必事先确定数据的规模,可以根据实际应用中的规模作动态调整,因而在实际应用时具有较好的通用性和灵活性。
然而,和采用静态变量实现的存储结构相比,动态链表存储结构的实现对许多学生来说具有一定的难度:例如,对动态变量的概念、实现及基本操作认识不清,对链表的连接操作无从下手,在实际应用时难以用上等。
因此,本次实验的目的就是希望能够加深对链表的存储结构的理解,熟练掌握动态链表结构及有关算法的设计。在此基础上,根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。
实验任务
说明1:本次实验中的链表结构均为带头结点的单链表。
说明2:为使实验程序简洁直观,下面的部分实验程序中将所需要的函数以调用库函数的形式给出,并假设将库函数放在程序文件"linklist.h"中,同时假设该库函数文件中定义了链表结构中的指针类型为link,结点类型为node,并定义了部分常用运算,例如构建链表、以某种方式显示链表、从文件中读入一个链表、跟踪访问链表结点等。各运算的名称较为直观,并有相应的注释,因而易于理解和实现。在上机实验时,需要自己设计出所涉及到的库函数,或者将函数放在实验程序中,以方便实验程序的调试。
实验说明
链表是常用和基础的数据结构存储形式,认真完成本次实验的任务,不仅可以达到预定的教学目标,而且可以为后续涉及到动态链表结构的实验奠定良好的基础。
如前所述,由于是第一个涉及动态变量的链表式存储结构,并且相关的运算实现和算法构思都存在一定的难度,因而使得实验有一定难度。因此,对实验提出如下要求:
首先要理解和掌握线性表的基本性质、基本运算要求、存储结构形式(包括结构形式、链表相关的语法描述)、动态变量的基本实现(申请变量和释放存储空间),在链表结构上实现在特定位置上插入结点、删除结点的基本运算。
理解并掌握线性表基本运算在采用链表存储时的实现方法和性能。
在此基础上,能熟练地运用于实际问题的求解。
为了完成针对特定问题和要求的链表算法的实验,通常需要完成以下工作:
- 选择或设计合适的存储结构。本实验已经指定采用链表存储结构,故此步可略。
- 设计出针对所选择的结构的算法(本实验中的大多数基本算法在教科书中都能见到)。
- 设计构造链表的算法,并在主程序中调用之以构造出链表,作为算法运行时的数据。为达到有效检验算法的目的,一般要求所构造的数据要尽可能多地包含各种情况,要有一定的复杂度,否则难以达到预定的目标。
- 运行算法以验证和检查算法的功能,发现存在的问题,并予以纠正。在这一环节要注意: 一般来说,对实际数据运行算法(或程序)不能替代正确性证明,某次运行成功不能说明算法一定正确。反之,若对某次运行不成功,则说明算法有错误或遗漏。由于初学者在算法设计中难免的不完备性或理解的局限性,使得算法中存在不同程度的问题。通过对具有一定复杂程度的实际数据的运行可有效发现存在的这些问题,提高学习的效果。因此,要注意算法运行的充分性,通过多种情况反复检查。
由此可知,实验程序包括如下内容:
- 需要实验和检验的算法;
- 构建结构的算法或程序段;
- 检查结构的算法或程序段;
- 主程序,包括定义对应结构的变量、调用算法构建结构,调用算法验证结构,然后调用实验算法运行,然后调用算法检验结果。
编程要求
请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证。
- Print 算法实现链表的遍历,即依次访问每个元素结点;
- Reverse 算法实现链表的倒置,并让链表的头指针 l 指向新表的表头。
- 函数 linklength 返回链表 L 的长度。
测试说明
平台会对你编写的代码进行测试。
开始你的任务吧,祝你成功!
#include "linklist.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负link l; // 定义指针型变量
void Print(link l) // 算法Print,依次访问每个元素结点
{link P; // 定义指针型变量P=l->next;//Blank 1while (P!=NULL){printf(P == l->next ? "%d" : " %d", P->data);//Blank 2P = P->next;}puts("");
}
void Reverse(link &L) // 算法Reverse,实现链表元素结点的倒置
{link h, u, tmp; // 定义所要用到的指针变量h = NULL; u = L->next; while (u!=NULL)//Blank 3{tmp = u->next;u->next = h;h = u;u=tmp;// Blank 4}L->next=h; // Blank 5
}
int linklength(link l) // 算法length
{link p;int i = 0;p=l->next; // Blank 6while (p!=NULL){i++;p=p->next; // Blank 7}return i;//Blak 8
}
void solve() // 主程序部分
{create_hsllist(l); // 调用函数库中的函数构建链表ldisp_check_hsllist("Created Sllist",l); // 显示并检查链表lprintf("Length=%d\n",linklength(l)); // 调用算法求链表l的长度Print(l); // 调用算法Print 对l运算Reverse(l); // 调用算法Reverse倒置l表的头结点之后的部分disp_check_hsllist("Reversed Sllist",l); // 显示在调用算法Reverse倒置后的结果链表l
}}
头歌平台数据结构与算法 单链表实验 第1关:倒置链表相关推荐
- 头歌平台数据结构与算法 线性表 第2关:实现一个连接存储的线性表
目录 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务要求针对链接存储方式实现的顺序表完成数据插入操作函数,以实现线性表数据插入功能. 相关知识 线性表的存储也可以采用链接存储方式来实现.链 ...
- 头歌实践教学平台数据结构与算法:02线性表——反转链表(拓展)
针对数据结构02线性表--反转链表(拓展)在头歌平台练习过程中的完成代码,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 已知一个带头结点的单链表L,将L反转并返回反转后的单链表.要求将L的 ...
- 头歌实践教学平台数据结构与算法:02线性表
针对数据结构02线性表在头歌平台练习过程中的完成代码,关卡数目较多,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中 ...
- 数据结构与算法--单链表相关面试题
此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...
- 头歌JAVA数据结构答案
头歌JAVA数据结构答案 一.Java数据结构-循环链表的设计与实现 第1关 单循环链表的实现-链表的添加.遍历 package step1; /*** Created by sykus on 201 ...
- 如何下载头歌平台在线实验闯关中的文件到本地进行查看
如何下载头歌平台在线实验闯关中的文件到本地进行查看 文章目录 如何下载头歌平台在线实验闯关中的文件到本地进行查看 一.前言 二.进入在线实验 三.使用SSH工具连接实验所属服务器 四.下载需要的文件到 ...
- 数据结构与算法 第二次实验报告堆栈队列
数据结构与算法 第二次实验报告 姓名:许恺 学号:2014011329 班级:计算机14-1 中国石油大学(北京)计算机科学与技术系 前 言 <数据结构>是计算机及相关 ...
- 头歌计算机组成原理汉字字库存储芯片扩展实验
全部答案点击底部 <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...
最新文章
- 诺基亚主导Windows Phone手机市场 前景仍然堪忧
- 掉网问题的log分析
- 多线程进一步的理解------------线程的创建
- enum to IEnumerableT
- wcf获取MySQL中午乱码,如何启用WCF日志记录,以便它写入数据库?
- Arthas 思维导图笔记
- python实现的、带GUI界面电影票房数据可视化程序
- asp.net 报表页面模板_Stimulsoft ASP.NET MVC报表教程:在设计器中保存报表模板
- 字符级中文文本分类-CNN基于TensorFlow实现
- SparkSQL JSON数据操作(1.3-1.4)
- 【渝粤教育】电大中专建筑施工组织 (2)作业 题库
- Android 5.0 屏幕录制/截屏
- 《FMEA潜在失效模式及效应分析实务》课程大纲--台湾李文棕老师
- 【C++】针对char 字符类型cout的三种输出情况(++ch 和 ch+1 和 ch++)难点加重点
- 计算机地图制图pdf,2计算机地图制图的数据基础.ppt
- 关于1Byte 1K 1M 1G(换算)
- 安卓阅读器开发_别买电子阅读器:即将淘汰Kindle的5项技术
- 云鹊医认证审核需要多久_云鹊医电脑版下载-云鹊医电脑版下载v3.0.6-西西软件下载...
- Vscode——编辑setting.json,但显示“无法在只读编辑器中编辑”的一种解决方法
- “我”Java程序员今年30岁,还有五年“寿命”所谓的中年危机?