数据结构与算法实习实验指导书.docx
- 文档编号:1974035
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:12
- 大小:30.50KB
数据结构与算法实习实验指导书.docx
《数据结构与算法实习实验指导书.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实习实验指导书.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构与算法实习实验指导书
数据结构与算法课程实习
实验指导书
实验一顺序表的基本操作2
实验二链表的基本操作3
实验三二叉树的基本操作4
实验四综合应用5
附录A实验报告示例10
附录B实验报告封面、评语得分表13
实验一顺序表的基本操作
【实验目的】
1、掌握顺序存储的概念,学会对顺序表的基本操作。
2、加深对顺序存储数据结构的理解,逐步培养解决实际问题的能力。
【实验性质】
设计型实验
【实验内容】
1、实现顺序表显示;
2、实现顺序表插入;
3、实现顺序表查找(显示比较次数);
4、实现顺序表删除(显示移动次数);
5、实现顺序表排序(分别实现简单选择、快速,显示比较次数、移动次数);
6、实现顺序表的折半查找(显示比较次数);
7、编程实现一个顺序表的就地逆置,即利用原表的存储空间将顺序表逆置;
8、顺序表有序插入(显示比较次数、移动次数),
屏幕提示后,从键盘输入一个元素值,在经过排序的线性表中插入这个元素;
屏幕显示比较次数和移动次数,应有溢出判断和报告;
9、要求以较高的效率实现删除顺序表中元素值在x到y(x和y自定)之间的所有元素;
10、编程实现将两个非递减的顺序表进行合并,要求同样的数据元素只出现一次;
*11、编程实现顺序表的排序(步长为5,3,1);
*12、编程实现堆排序算法;
*13、利用三元组顺序表存储矩阵,实现矩阵的转置(请独立写程序实现)。
【实验环境】
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、请编程实现链栈的基本操作函数,并通过调用这些基本函数,实现十进制和八进制转换的功能。
【实验环境】
6.0
【实验要求】
将如上文件保存在命名为“学号+姓名”的文件夹中并上传到指定的服务器。
实验三二叉树的基本操作
【实验目的】
【实验性质】
设计型实验
【实验内容】
、实现二叉树的创建;
2、用递归方法分别先序、中序、后序遍历以为根指针的二叉树;
3、编写递归算法,计算二叉树中叶子结点的数目;
4、编写递归算法,计算二叉树的深度;
5、编写递归算法,将二叉树中所有结点的左、右子树相互交换;
6、使用数组中的随机数序列(以0表示结束,不包括0),生成以为根指针的二叉排序树;
7、在以为根指针的二叉排序树中查找结点;
8、从以为根指针的二叉排序树中删除结点(适用各种位置的结点);
9、用非递归算法,先序遍历以为根指针的二叉树;
提示:
用数组*[]构成堆栈,利用这个堆栈实现功能。
10、用凹入表示法的表示以为根指针的二叉树,例如:
324
123
746
690
567
11、用广义表表示以为根指针的二叉树,例如
(324(123(746,690),567))
12、对以为根指针的二叉树,从根结点开始,逐层从左到右输出各结点的数据。
提示:
用数组*[]构成队列,利用这个队列实现功能
13、根据编码原理,使用数组中的随机数序列(以0表示结束,不包括0)作为结点的权重,生成赫夫曼树,以及赫夫曼编码,计算平均带权径长度。
14、
(1)随机生成二叉树。
(2)生成并保存先(后)序、中序输出序列。
(3)按照保存的一对输出序列恢复出二叉树。
(4)生成先(后)序输出序列。
【实验环境】
6.0
【实验要求】
将如上文件保存在命名为“学号+姓名”的文件夹中并上传到指定的服务器。
实验四综合应用
一、运动会分数统计
问题描述
参加运动会的n个学校编号为1。
比赛分成m个男子项目和w个女子项目,项目编号分别为1和1。
由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
写一个统计程序产生各种成绩单和得分报表。
基本要求
产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。
测试数据
对于432,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。
实现提示
可以假设n<=20<=30<=20,姓名长度不超过20个字符。
每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。
选作内容
允许用户指定某项目采取其他名次取法。
二、一元稀疏多项式简单计算器
问题描述
设计一个一元稀疏多项式简单计算器
基本要求
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列:
1122,……,其中n是多项式的项数,和分别是第i项的系数和指数,序列按指数降序排列;
(3)多项式a和b相加,建立多项式;
(4)多项式a和b相减,建立多项式。
测试数据
(1)(25x3-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+27)
(2)(634.4X2-1.2X9)-(-63+5.4X22+7.8X15)=(-7.8X15-1.2X9+123)
(3)(12345)+(34)=(125)
(4)(3)+(3)=0
实现提示
用带表头结点的单链表存储多项式。
选作内容
(1)计算多项式在X处的值。
(2)计算多项式a的导函数a’。
(3)多项式a和b相乘,建立乘积多项式。
(4)多项式的输出形式为类数学表达式。
例如,多项式-3x8+6x3-18的输出形式为-3x^8+6x^3-18。
注意,系数为1的非零次项的输出形式中略去系数1,如1x8的输出形式为x^8。
(5)计算器的仿真界面。
三、停车场管理
问题描述
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆停放在车场的最北端),若车厂内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
基本要求
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
测试数据
设2,输入数据为(A,1,5),(A,2,10),(D,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。
其中A表示到达;D表示离去;E表示结束。
实现提示
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。
输入数据按到达或离去的时刻有序。
栈中每个元素表示一辆汽车,包含两个数据项:
汽车牌照号码和进入停车场的时刻。
选作内容
(1)两个栈共享空间,思考应开辟数组的空间是多少。
(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。
(3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。
(4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。
四、航空客运订票系统
问题描述
航空客运订票的业务活动包括:
查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
基本要求
(1)每条航线所涉及的信息有:
终点站名、航班号、飞机型号、飞行周日(星期几)、乘员定额?
、余票量、已定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);
(2)作为示意系统,全部数据可以只放在内存中;
(3)系统能实现的操作和功能如下:
查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
承办定票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若以满员或余票额少于定票额,则需重新询问客户要求。
若需要,可登记排队候补;
承办退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
测试数据
自行指定。
实现提示
两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作为存储结构,由于预约人数无法预计,队列也应以链表作为存储结构。
整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这张表上的一个记录,包含上述8个域,其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。
选作内容
当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其它航线情况。
还可以充分发挥自己的想象力,增加系统的功能和其他服务项目。
五、简单行编辑程序
问题描述
文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。
限制这些操作以行为单位进行的编辑程序称为行编辑程序。
被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法既不经济,也不总能实现。
一种解决方法是逐段编辑。
任何时刻只能把待编辑的文件的一段放在内存中,称为活区。
试按照这种方法实现一个简单的行编辑程序。
设文件每行不超过320个字符,很少超过80个字符。
基本要求
实现以下4条基本编辑命令:
(1)行插入。
格式:
i<行号><回车><文本>.<回车>
将文本插入活区中第<行号>行之后。
(2)行删除。
格式:
d<行号1>[<空格><行号2>]<回车>
删除活区中第<行号1>行(到第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 实习 实验 指导书