桂 林 理 工 大 学
实 验 报 告
班级 计算机类2 学号 32020520 姓名 同组实验者
实验名称 线性表的实现以及应用 日期 2021 年 6 月 3 日
一、实验目的:
1.理解线性表的逻辑结构。
2.掌握线性表的存储方法,包括顺序表和链表,理解两种存储方式的差异。
3.掌握顺序表、链表上各种基本运算的实现。
4.运用线性表解决一些典型的实际应用问题。
二、实验环境:
Visual C++ 6.0
三、实验内容:
(写出主要的内容)
PART 1 顺序线性表基本操作
说明:PART 1 实验相关源代码在文件夹seqlist中。
进入文件夹seqlist,阅读以下文件:seqlist.h、seqlist.cpp,了解代码的结构及功能,。
2. 打开源文件test_seqlist.cpp,理解代码实现的功能,观察运行结果。在程序中/*增加代码*/位置处添加代码,实现如下功能:输入一个整型数据data,调用相应的函数,在线性表L中查找是否有数据的值与data相等,如果有,则显示是第几个数据,如果没有,则显示“没有找到”。说明:若需要增加变量,请自行添加合适的变量定义语句。
在seqlist.cpp文件中,增加一个函数,函数功能为将线性表中指定值的数据项更新。函数首部为: int Update (SeqList *L, ElemType x, ElemType y)
3.将文件test_seqlist.cpp中主函数的功能进行扩展,实现如下功能:
从顺序表L中删除所有值介于a和b之间的所有元素,a,b的值由键盘输入,并将删除之后的顺序表输出。
4. 理解源merge_example.cpp中的代码,观察运行结果。该程序实现的是教材46页,算法2.4 线性表的合并运算。
说明:PART 2 实验相关源代码在文件夹seqlist_Poly中。
1. 进入文件夹seqlist_Poly,阅读以下文件:seqlist.h、seqlist.cpp,了解代码的结构及功能。与PART 1中的代码比较,掌握将线性表中数据项由整型改为结构体类型的方法。
2. 文件Polyadd.cpp中的代码实现简单的功能,输入两个多项式对应的线性表,并输出。(说明:输入时按照系数递增的顺序,如教材66页图2.31对应的多项式polya,则输入数据为:7 0 3 1 9 8 5 17 0 0)。理解代码并运行。
文件Polyadd.cpp中的函数void PolyAdd(SeqList *La,SeqList *Lb);实现两个多项式相加的功能,指针La所指向多项式与指针Lb所指向多项式相加,所得结果放在La指针中。请将函数体补充完整。
说明:PART 3 实验相关源代码在文件夹linklist中。
进入文件夹linklist,阅读以下文件:linklist.h、linklist.cpp,了解代码的结构及功能。
打开源文件test_linklist.cpp,理解代码实现的功能,观察运行结果。在程序中/*增加代码*/位置处添加代码,实现如下功能:输入一个字符,如果单链表L中有该字符,则在链表中删除该字符所对应的结点,否则给出提示。
新建一个源文件ex_linklist.cpp,实现如下功能:用尾插法建立一个字符型的单链表,依次显示单链表各个结点的数据域信息(即data数据成员的信息);对单链表进行如下更新处理:依次对每个结点进行访问,如果该结点的data值是大写英文字符,则更新为相应的小写字符,如果该结点的data值是小写英文字符,则更新为相应的大写字符,如果是其他字符则无需处理,输出更新之后的单链表信息。
PART 4链表应用
说明:PART 4 实验相关源代码在文件夹clinklist中。
进入文件夹clinklist,阅读以下文件:clinklist.h、clinklist.cpp,了解代码的结构及功能。说明:clinklist.h文件定义了单链表结构,clinklist.cpp中给出了循环单链表的初始化,建立,输出函数。此处建立循环链表是以约瑟夫环问题为背景。注意循环单链表与单链表的区别。
打开源文件ysf.cpp,运行程序,观察运行结果。此文件实现了建立约瑟夫环循环链表。在此代码的基础上,实现约瑟夫环问题的求解,输入n,m值,输出退出的顺序。
约瑟夫环问题描述:约瑟夫环问题是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从第一个开始报数,第m个人退出,最后剩下一个为胜利者。例如n=6,m=5,则退出的顺序是:5,4,6,2,3。
四、心得体会:
1.对线性表有了一定的了解,学习顺序链表,单链表,循序链表的用法。
2.花费了很多时间,不断的尝试。个人对定义,基本解法不太熟悉,所以要加强基础知识的了解,理解它使用的方法。
3.多看一些链表的典型例题,了解每条语句执行的意思,以及多了解指针的用法和结构体的用法。
要求:实验报告电子档文件命名必须是:学号姓名实验号。
例如:12100316张健1.docx