C/C++《数据结构课程设计》实验指导书(4题目)[2024-05-15]

C/C++《数据结构课程设计》实验指导书(4题目)[2024-05-15]

《数据结构课程设计》实验指导书
一.课程设计的要求

  1. 问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么,限制的条件是什么。
  2. 逻辑设计:对问题中涉及到的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序和各抽象数据类型,逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图。
  3. 物理设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据结构存储结构的类型定义,写出函数形式的算法框架。
  4. 程序编码:把详细设计的结果进一步求精为程序设计语言。同时加入一些注解和断言,使程序中逻辑概念清晰。
  5. 程序调试和测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序和注释,形成格式和风格良好的源程序清单和结果。
  6. 结果分析:程序运行结果包括正确的输入及其输出结果、含有错误的输入和输出结果、算法时间复杂度和空间复杂度分析。
  7. 撰写课程设计报告:总结和提升上述过程和步骤,写出结构严谨、表述清楚、符合设计规范的报告。

二 课程设计题目
(1)线性表
源码联系UP主 -> https://space.bilibili.com/329101171
项目1:单链表操作
建立一个单链表,显示链表中每个节点的数据,并做删除和插入处理。
例:(掌握线性表在链式存储结构下的基本运算的实现。)
1、功能
(1) 建立以带头结点的单链表
(2) 显示链表中每个结点的数据
(3) 在单链表中指定位置插入指定数据并输出单链表中所有数据
(4) 删除单链表中指定的结点并输出单链表中所有数据
2、输入要求
输入单链表中所有数据,插入的数据元素的位置、值,要删除的数据元素的位置。
3、测试数据
单链表中所有数据:12,23,56,21,8,10,15,67,90,32
插入的数据元素的位置、值:1,28
要删除的数据元素的位置:10
[概要设计]
(1)算法思想:由于在操作过程中要进行插入、删除操作,为运算方便,选用单带头结点的单链表作数据元素的存储结构。对每个数据元素,由一个数据域和一个指针域组成,数据域放输入的数据值,指针域指向下一个结点。
(2)数据结构
单链表结点类型:
typedef struct Node
{ int data;
struct node *next;
}ListNode;
带头结点的单链表类型定义:
typedef ListNode *LinkList;
(3)模块划分:
① 建立点头结点的单链表CreatLinkList;
② 显示链表中每个结点的数据PrintList;
③ 在单链表中指定位置插入指定数据并输出单链表中所有数据InsertList;
④ 删除单链表中指定的结点并输出单链表中所有数据DeleteList;
⑤ 主函数mian(),功能是给出测试数据值,建立测试数据值的带头结点的单链表,调用PrintList函数、InsertList函数、DeleteList函数实现问题要求。

项目2:约瑟夫环(Joseph)问题
描述:编号1,2,┉,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数),一开始,任选一个正整数作为报数上线值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1开始报数,如此下去,直至所有人全部出列为止。设计一个程序求出出列顺序。
(2)数组、栈和队列

项目3:迷宫
用n×n矩阵M表示一个迷宫,0和1分别表示通路和墙壁。迷宫的入口地点下标为(1,1),出口点下标为(n,n)。试求出从入口点到达出口点的一条通路。
[基本要求]
利用二维数组存储迷宫,采用递归算法实现。
[测试数据]
自己设计一个8≤n≤20的数据,并把测试迷宫打印出来,程序能够求出一条这样的通路。

项目4:停车场管理
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场。每辆停放在车场的车在它不离开停车场时必须按它停留的时间长短交费。试为停车场编制按上述要求进行管理的模拟程序。
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离开”信息,汽车牌照号码以及到达或离去的时刻。与每一组输入数据信息相对应的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。(提示:需另设一个栈,临时停放为给要离去的汽车让路从停车场退出来的汽车,也用顺序存储结构实现。)
[测试数据]
设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达,‘D’表示离去,‘E’表示输入结束。
其中:(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,1,15)表示1号牌照车在15这个时刻离去。
(3)树

项目5:二叉树创建与输出
请使用数组输入二叉树的结点数据,按照提示以链表结构创建二叉树,完成后将链表内容输出。
提示:创建二叉树结点数据的策略有三个,如下:

  • 将第一个要创建的元素插入成为根节点。
  • 将元素值与结点值比较,如果元素值大于结点值,将此元素送往结点的右儿子结点,如果右儿子结点不是空的,需要重复比较,否则创建结点将元素值插入。
  • 如果元素值小于结点值,将此元素送往结点的左儿子结点,如果左儿子结点不是空的,需要重复比较,否则创建结点将此元素值插入。
    例如:二叉树结点值输入的数据顺序是5,6,4,8,2,3,7,1,9。按照上述策略创建的二叉树,如下图所示:
  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值