《软件技术基础》实验指导书_实验三、四

合集下载

软件工程实验教学大纲

软件工程实验教学大纲

软件工程实验教学大纲
一、课程简介
软件工程实验是软件工程专业的一门基础实验课程。

本课程旨在通过实践操作和实验项目,培养学生软件开发与测试的能力,提升学生的团队协作和解决问题的能力。

本课程将通过一系列实验项目,引导学生掌握软件工程的基本概念、方法和流程。

二、教学目标
1.了解软件开发的基本原理和方法;
2.理解软件工程的基本概念和软件开发的生命周期;
3.掌握常用的软件开发工具和方法;
4.培养团队合作和项目管理能力;
5.提升解决问题和分析能力。

三、教学内容
本课程的教学内容主要包括以下几个方面:
1.软件开发基本原理
- 软件开发的基本概念和流程
- 需求分析与规格说明
- 设计与架构
- 编码与测试
- 部署与维护
2.软件开发工具和方法
- Agile开发方法
- 敏捷开发工具和项目管理工具的使用
- 版本控制工具的使用
3.实验项目
本课程将根据教学内容设计一系列实验项目,每个实验项目都将涉及到一定的软件开发和测试任务。

具体的实验项目将在课程开始前公布,并根据学生的实际情况进行调整。

四、教学方法。

《软件技术基础》实验指导

《软件技术基础》实验指导

说明每个实验题目含有一个main函数和一些函数, 与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出, 供上机实验参考使用。

对于每个题目, 只需要根据题目要求设计算法, 补充函数定义, 然后对程序进行编译、调试。

实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验内容设有一个线性表E={e1, e2, …, en-1, en}, 设计一个算法, 将线性表逆置, 即使元素排列次序颠倒过来, 成为逆线性表E’={ en , en-1 , …, e2 , e1 }, 要求逆线性表占用原线性表空间, 并且用顺序表和单链表两种方法表示, 分别用两个程序来完成。

(文件夹: 顺序表逆置、单链表逆置)已知由不具有头结点的单链表表示的线性表中, 含有三类字符的数据元素(字母、数字和其他字符), 试编写算法构造三个以循环链表表示的线性表, 使每个表中只含有同一类的字符, 且利用原表中的结点空间, 头结点可另辟空间。

(文件夹: 分解单链表)实验二栈和队列一、实验目的1.熟悉栈和队列的顺序和链式存储结构2.掌握栈和队列的基本运算3.能够利用栈和队列的基本运算完成栈和队列应用的运算二、实验内容1.设单链表中存放有n个字符, 试编写算法, 判断该字符串是否有中心对称的关系, 例如xyzzyx是中心对称的字符串。

(提示: 将单链表中的一半字符先依次进栈, 然后依次出栈与单链表中的另一半字符进行比较。

)(文件夹: 判字符串中心对称)假设以数组sequ[m]存放循环队列的元素, 同时设变量rear和quelen 分别指示循环队列中队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。

(文件夹:循环队列)实验三串一、实验目的1.熟悉串的顺序存储结构2.掌握串的基本运算及应用二、实验内容1. 串采用顺序存储结构, 编写朴素模式匹配算法, 查找在串中是否存在给定的子串。

计算机软件技术基础_实验指导书

计算机软件技术基础_实验指导书

《计算机软件技术基础》实验指导书编写:XXX适用专业:电器工程与自动化通讯工程电子信息工程安徽建筑工业学院电子与信息工程学院2007年9月实验一:线性链表的建立、查找、插入、删除实验实验学时:2实验类型:验证实验要求:必修一、实验目的通过本实验的学习,要求学生能够通过单链表的存储结构,掌握单链表的基本操作,包括单链表的建立、查找、插入、删除、输出等操作。

通过本实验可以巩固学生所学的线性表知识,提高编程能力,为后继课程的学习奠定基础。

二、实验内容1、为线性表{10,30,20,50,40,70,60,90,80,100}创建一个带头结点的单链表;2、在该链表上查找值为50,65的结点,并返回查找结果(找到:返回在县新链表中的位置);3、在该链表上值为50的结点后,插入一个值为120的结点;4、删除该链表上值为70的结点。

写出各操作的实现函数,并上机验证。

三、实验原理、方法和手段使用带头结点的单链表的表示线性表,通过实验,熟悉链表的创建、查找、插入、删除、输出等是链表的基本操作。

具体如下:(1)首先定义单链表的节点结构;(2)在单链表创建过程中,首先初始化一个带头结点的空链表,对线性表中的各元素依次通过键盘输入、建立该元素结点、插入到单链表中,实现单链表的创建过程;结点的插入有头插入和尾插入两种方法,采用不同方法时应注意元素的输入顺序。

(3)查找过程可以从头结点开始,将待查找的数据依次与每个结点的数据域比较,匹配及查找成功,弱链表访问完未找到匹配的元素,则查找不成功。

为能够返回查找成功的结点位置,在链表的搜索过程中,应设置一个计数器,记录搜索结点的序号;(4)插入结点时,首先要通过查找算法,找到带插入结点的前驱结点,然后为带插入元素建立结点,通过指针的修改,将结点插入。

(5)删除结点时,首先要通过查找算法,找到待删除结点的前驱,然后通过指针的修改,将待删除结点从链表中卸下,释放该结点。

(6)以上操作的正确性,均可以通过链表的输出结果来验证。

多媒体技术实验指导书

多媒体技术实验指导书

《教学软件设计与开发》实验教学指导书课程名称:教学软件设计与开发英文名称:Instructional Software Design and Development设置形式:非独立设课课程模块:专业核心课实验课性质:专业基础实验课程编号:501819课程负责人:冯天敏大纲主撰人:冯天敏大纲审核人:李焕勤一、学时、学分课程总学时:64实验学时:32课程学时:4二、适用专业及年级教育技术学二年级三、课程目标与基本要求熟悉多媒体教学软件的类型和设计因素;掌握教学软件设计的基本理论和方法;熟悉多媒体教学软件设计与开发过程;熟练掌握教学软件的编辑制作技术;了解评价标准和实施方法,形成初步的多媒体教学软件设计、开发能力和项目管理能力,训练创作工具开发多媒体教学软件的技能,培养创新意识和创新能力,提高学生的合作意识和合作能力。

四、主要仪器设备计算机五、实验项目及教学安排考核方式:1、实验平时成绩:(1)实验考勤:每次考勤分出勤(2分);请假、迟到、早退(1分);旷课(0分)记分。

(2)预习报告:要求写明实验目的、主要实验设备名称、实验原理和内容。

分优秀(4分)、良好(3分)、中等(2分)、及格(1分)和不及格(0分)记分。

(3)实验报告:要求写明实验设备名称和型号、实验步骤、实验分析及注意事项。

分优秀(4分)、良好(3分)、中等(2分)、及格(1分)和不及格(0分)记分。

实验平时成绩最后折算成100分。

2、平时作业:根据作品评定成绩,满分为100分。

3、实验考试:上机考试,满分为100分。

成绩评定:总实验成绩占本课程成绩的50%。

总实验成绩=实验平时成绩×20%+平时作业×30%+实验考试成绩×50%。

七、实验教科书、参考书1.实验教科书教学软件设计与开发(讲义),冯天敏,20062.实验参考书多媒体教学软件设计与开发,王志军等著,高等教育出版社,2006.5实验一 Authorware开发平台基础一、实验目的1. 熟悉 Authorware 的集成开发环境2. 掌握 Authorware 图标的基本功能、编写功能3.掌握计算图标的使用、函数变量的使用4.理解athorware的基本语句及用法二、实验内容1.Authorware的集成开发环境的认识;2.Authorware的图标类型及创建;3.计算图标窗口;4.变量、函数的类型及应用;5.Authorware的脚本语句。

《软件工程》实验指导书-卓越项目

《软件工程》实验指导书-卓越项目

《软件工程》实验指导书太原理工大学计算机科学与技术学院2013年3月目录第一部分实验教学大纲 (1)第二部分实验说明 (3)实验一软件工程的网上资源与常用的CASE工具 (3)实验二传统软件开发方法的可行性研究 (5)实验三传统软件开发方法的需求分析建模 (6)实验四传统软件开发方法的结构设计 (7)实验五系统测试 (8)实验六面向对象的分析与设计 (9)实验七软件项目管理 (10)附录一实验题目 (11)第一部分实验教学大纲课程名称:软件工程(Software Engineering)课程总学时: 48 学时[理论: 40 学时;实验: 8 学时]课程总学分: 3 学分适用专业和年级:计算机科学与技术、软件工程专业一、实验的目的与任务本实验课程通过完整地实施软件生命周期各阶段的任务,让学生系统地学习到软件开发过程的主要理论、方法、技术、标准和规范,使他们具备基本的软件开发设计能力;通过软件工程中常用CASE工具和软件项目管理的实践,使他们具备运用各种工具完成项目设计和实施的基本技能;通过集体项目开发,培训学生的合作意识和团队精神,培养学生对技术文档的编写能力。

二、实验内容和要求本课程的实验内容包括结构化(生命周期法)的方法学和面向对象的方法学。

通过一个模拟项目,要求学生分别用结构化方法和面向对象的方法完成系统的分析、设计和实现的整个软件开发过程。

此外实验中引入我国国家《计算机开发规范》,以规范技术文档的书写标准,提高实验教学质量。

实验要求学生采用“项目小组”的形式,结合具体的开发项目进行分析、设计。

每个项目小组必须按照《软件工程实验指导书》附录中给定的文档规范标准提供项目文档;具体要求如下:1.班级按项目不进行分组。

2.每个人均为负责人或项目经理,由项目经理召集项目组成员讨论、选定开发项目,所有实验中都要采用同一个实验题目。

项目开发的每项任务要规定该任务的起止日期和时间。

3.每个项目均要进行需求分析,完成需求分析报告,修订并评审需求分析报告,确定系统的需求分析模型。

北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发

北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发

实验报告
实验名称数据库应用系统的开发
班级
学号
姓名
成绩
【实验方案设计】
1. 利用Visual Basic里的VB Application Wizard按照步骤逐步创建一个窗体应用程序,并链接到上一实验创建的数据库中,同时添加各种操作按钮,如插入、删除、更改等,最后将数据库的每个表视图集合到主视图中
【实验过程】(实验步骤、记录、数据、分析)
1.选择数据来源种类
2.选择数据库文件并做链接
3.选择数据视图布局,此处选择网格式布局,便于查看全部数据
4.选择一个表及要添加的字段和排列顺序
5.选择对数据可进行的操作按钮,如添加、更改、删除、更新、关闭等
6.添加完一个表后,继续添加其他表,直到整个数据库所有表已添加
7.添加完成后界面
8.通过链接到ACCESS数据库的VB数据库管理程序查看每个表数据,并进行数据增加、删除、修改等操作
9.在数据库管理系统中对数据进行增加操作,此处增加一条订单ID为151112的记录,可以看到在ACCESS中的数据表进行了同步增加。

这样就可以达到不打开ACCESS而只通过一个单界面应用程序就实现对数据库的维护工作,具有简单性、高效性的特点。

第一讲 - 西安交通大学精品课程 软件开发技术基础

第 17 页

3. 软件工程阶段: 改变软件开发的技术手 段和管理方法,解决软件危机
– 硬件已向“四化”(巨型、微型、网络、智能) 发展,数据库技术已成熟并广泛应用,第三、 四代语言出现。 – 第一代软件技术——结构化程序设计在数值计 算领域取得优异成绩; – 第二代软件技术——软件测试技术、方法、原 理用于软件生产过程; – 第三代软件技术——处理需求定义技术,用于 软件需求分析和描述。

3. 操作系统
– 掌握操作系统的基本概念和基本功能 – 了解计算机系统硬、软件资源控制方法 – 了解应用软件开发的最基本的环境
第 8 页
三、课程基本要求

4.数据库
– 理解数据库的基本概念 – 初步掌握数据库系统的开发方法 – 掌握常见的DBMS软件的使用

5.软件工程
– 了解以近代软件工程的观点开发应用软 件的基本概念和方法。
第 11 页
《软件技术基础》概述
一. 软件的基本概念 二. 软件的特征 三. 软件的分类 四. 软件的发展 五. 软件危机

第 12 页
一. 软件的基本概念
1.完整的计算机系统由硬件和软件构 成 2. 软件是各种程序和有关资料的总称。 3. 程序:

– 为实现特定目标或解决特定问题而用计 算机语言编写的命令序列的集合,是人们 求解问题的逻辑思维活动的代码化描述

– 静态: 是求解问题ຫໍສະໝຸດ 逻辑描述,供阅读和 交流 – 动态: 通过运行执行特定的操作和处理

判别程序是否正确的双重标准:
– 静态:检查语法规则; – 动态:测试所有逻辑流程结构和数据结构。
第 15 页
三. 软件分类

人工智能技术实验指导书

人工智能技术实验指导书实验背景本实验指导书旨在帮助学生深入了解人工智能技术的基础原理及应用方法。

通过本实验,学生将能掌握人工智能技术的基本概念、算法和编程技能,为未来在人工智能领域的研究和研究打下坚实基础。

实验目的本实验旨在培养学生的人工智能算法设计和编程能力,提高学生对人工智能技术的理解和应用能力。

实验内容实验一:人工智能算法基础- 研究人工智能算法的基本概念和分类;- 掌握常见的人工智能算法原理和实现方法;- 利用Python编程语言实现简单的人工智能算法。

实验二:机器研究算法实践- 掌握机器研究算法的基本原理和应用方法;- 研究使用机器研究库进行数据预处理和算法训练;- 利用已有数据集,实现一个简单的机器研究算法模型。

实验三:深度研究算法应用- 理解深度研究算法的基本原理和结构;- 研究使用深度研究框架进行神经网络模型的设计和训练;- 实现一个简单的深度研究算法应用案例。

实验要求- 学生应具备基本的编程能力,熟悉Python编程语言;- 学生应具备基本的数学和统计知识,对概率和线性代数有一定了解;- 学生应具备良好的逻辑思维能力和问题解决能力。

实验评估- 实验报告:学生需按要求书写并提交实验报告,内容包括实验目的、方法、实验结果和分析等;- 实验成绩:根据实验报告和实验结果,对学生的实验成果进行综合评估。

实验资源- 教材:提供相关的教材和参考书籍,供学生参考和研究;- 软件工具:提供相应的编程环境和开发工具,供学生进行实验操作和编程实现。

实验安排- 实验时间:本实验预计需要3周的时间完成;- 实验地点:学生可以自行选择合适的实验地点进行实验。

注意事项- 学生在进行实验时,应遵守实验室规定和安全操作流程;- 学生在编写实验报告时,应保证报告内容真实可信。

参考资料- 《人工智能导论》- 《机器研究实战》- 《深度学习》。

《软件技术基础》实验教学系统研究与设计


教 学 系统 , 提 高 教 学 手段 , 实 现 实 验 教 学 的
改革 。
1 实验 教学面 临的主要问题
随 着 科 学 技 术 的 发 展 和 对 教 学 效 果 要 求的提高 , 本课 程 的 实 验 教 学 仍 有 亟 待 改 进之处, 主要包括 : ( 1 ) 由于 该课 的 实验 教 学 历年 来 未 有大 的变革 , 常 规 的 授 课 方 法 难 以 有 效 地 展示 实验中数据结 构和算法的 抽象性 、 瞬 间 动 态特 性 、 算 法 的 运 行 和分 析 过 程 , 使得理 论 基 础
知识难以理解 。 ( 2 ) 上机学时少 , 学 生 只 侧 重 于 对 实 验 指导书列 出的程序进行验 证实验 , 缺 乏 足
够的程序设计和 调试方面 的练 习, 没 有 真 正掌握程序设计 的方法和 编程技巧 , 从而 无 法 体 会 到 该 门 课 程 的重 要 性 和 实 用 性 。
调试 , 运 行 结 果及 算 法 分 析 等 实 验教 学 活 模 块 实 验 目录 界 面 , 通 过 退 出按 钮 退 出 整 数 据 处 理 模块 主 要 包 括 排 序 动。 学 生 用 户 登录 后 可 针 对 某 一 特 定 实 验 个 实验 系统 。 项 目进 行 程 序 编 写 , 调试 , 仿真 , 观 察 和 分 和 查 找 算 法 的 验 证 型 实 验 项 目 。 排 序 主 要 析 实验 结 果 等 实验 活 动 。 通 过 实 际应 用 该 是 插 入 、 选择 、 交 换 和 归并 排 序 t 查 找 主 要 实验教 学系统取得 了较好的授课效果 , 并 是 线 性 表 的顺 序 、 折半、 分块 查 找 和 二 叉排 根据学 生 、 教 师使 用 后 反 馈 结 果 来 不 断 完 序 树 的 查找 。 授课时 , 教 师 可 以对 查 找 和 排 序 相 关 算 法 的 运 行过 程 进 行 动 态 演 示 和算 善 系统 功 能 。 并能 够 指 导 学 生调 用 C 语 言 编 写的 本 系 统 实 验 内容 主要 包 括 数 据结 构 实 法 分 析 , 验、 数 据 处 理 实验 和 综 合 实 验 三大 模 块 , 各 后 台源 程 序 , 进行程序调试和验证练 习。 个 模 块 下 面 还 可 根 据 实 验教 学 内容 要 求再 综合实验 主要 由选题 、 设 计 和 提 交 三 细分 , 系统 结 构 如 图 l 所示。 部 分组 成 。 学 生 可 以 通 过选 择 某 个 综 合 实 数据 结 构 模块 主 要 包 括 线 性 表 、 栈、 队 验 项 目 , 查 看 其 设 计 任务 书 , 进行 “ 审题” 一 列、 树 和 图 等数 据 结 构 的 验证 型实 验 项 目。 “ 分析 ” 一“ 解决” 一“ 最 后 程序 实 现 ” 一“ 调 整 个过 程 的 锻 炼 。 最后 , 可 以 从设 计 方 实验授课时 , 针 对某 一 数 据 结 构 , 教师 边 讲 试 ” 程 序 代码 和 程 序 运 行结 果 这 三 方 面 进 解边操 作演示 , 对 难 以 理 解 的 重 要 知 识 点 案 教 师根 据 学 生 提 交 的 设 通过简单 的动画生动 直观进行讲解 , 使 变 行 设 计 内容 提 交 。 给定分数。 得 明了 易 懂 , 将数 据 结 构 的算 法进 行 解 析 , 计 内容 进 行 批 阅 , 分 步 实 现 动 态 可视 化 。 在 上机 实验 过 程 中 , 本 实 验 系 统 能 够 供 学 生 课 外 反 复观 察 学 生 通 过 对 同 一 问题 的 不 同程 序 分 别 调试 体 会 , 增 强软 件 技 术 基 础 相 关 课 程 知 识 点 运行, 观 察 程 序 单 步 运行 时 的 变 化 情 况 , 进 的 理 解 和 应 用 能 力 。 在 课 外 时 间 进 行 综 合 缓 解 了课 内上 机 学 时 少 而总结 和分析各种算 法的优缺 点, 可 以 激 应 用 型 实 验 练 习 , 的矛盾 。 该 系 统 实 验 项 目从 调 整 教 学 内容 发 学 生 的 学 习积 极 性 , 提 高 学 习效 果 [ 2 ] 。 更侧 重 于 加 强 程 序 设 计 和 调 试 技 巧 单 链 表 结 点插 入 实 验 , 通 过 选 择 实 验 着 手 , 使 学 生 掌 握 程 序 设 计 的 基 项 目和 和 具 体 插 入 算 法 , 可 显 示 该 算 法 的 等 实 践 性 锻 炼 , 提 高学 生 编 程 技 巧 和 解 决 实 际 问 特定程序 代码 , 算 法 功 能框 中 显 示 所 选 择 本 思 想 , 算法详 细功能描述 , 动 画演 示 框 可 模 拟 出 题 的能 力 。 算法运行 结果 , 图 中还 设 置 了 一 些 程 序 运 行控制按 钮和实验控制按钮 。 运 行 控 制 按 3结语 钮可以设 定程序运行状态 , 观 察 程 序 的 整 总之 , 《 软件 技术基础 》 实 验 教学 系 统 个 执 行过 程时 , 可 选 择 全 速执 行 ; 观 察单 条 是 集 声音 、 图像 , 动 画和 文 字 为一 体 的 多媒 改善 了枯 燥 的教 学方 式 , 教 学 效 果 语句运行结果时, 可 以 选 择单 步执 行 ; 还 可 体 软 件 , 在演示过程 中进行暂停和停 止操作 。 实 验 直 观 形象 。 该 系 统 可 以对 抽 象 、 复 杂 的数 据 控制按钮 可对该实验过程 进行操作 , 点 击 结 构 和算 法 进 行 解 析 , 直观 、 动 态 的模 拟 程 实 验 按钮 可 对 实 验 项 目内容 、 代码 、 图 形等 序 运 算 过 程 , 对 学 生 理 解 和 掌 握 相 关 知 识 信息进行 修改 ; 可 通 过 上 一 页 和 下 一 页 来 起 到 了很 大 的 辅 助 作 用 , 提高 了教 学 质量 。 型 实 选择实验项 目; 还 可 通 过 返 回 按 钮 回 到 本 该 系 统还 能 供 学 生 课 外 进行 综 合 应 用 验练习, 着 重 挖 掘 学 生 的潜 能 , 培 养 学 生 创 新思维 , 使 学 生 从 被 动 应 付 实 验 转 变 为 主 动研究实验 , 促 进 学 生 的编 程 能 力 和 综 合 应用能力的全面提高 。

软件技术基础实验指导书(1)

软件技术基础实验指导书2014年9月1日目录实验一斐波那契数列的实现算法及分析 (3)实验二顺序表的实现与应用 (5)实验三链表的实现和应用 (7)实验四栈的实现和应用 (9)实验五队列 (11)实验六二叉树的创建和遍历 (12)实验七图 (15)实验八哈夫曼树及哈夫曼编码 (16)实验九查找算法的实现 (19)实验十内部排序算法的实现 (26)实验十一迷宫问题 (29)实验十二 B+树程序设计 (30)实验十三四叉树程序设计 (31)实验十四修路方案问题 (32)实验一斐波那契数列的实现算法及分析实验目的:1.掌握分别用递归和非递归方法计算斐波那契(Fibonacci)数列。

2.掌握算法性能测试的方法,并能进行算法分析和比较。

实验环境(硬/软件要求):Windows 2000, VisualC++ 6.0实验内容:二阶Fibonacci数列的定义如下:F0=1,F1=1, F2=2,F3=3,F4=5,。

,Fi=F(i-1)=F(i-2) (i>=1).试用递归法和非递归法两种方法写出计算Fn的函数。

实验要求:1.完成计算Fn的递归函数Fib-rec.2.完成计算Fn的非递归数列Fib-ite.3.当n=10,15,20,25,30,35,40,45时测试以上两种算法执行的时间,并把测试结果填写在附表1-1中。

附表1-1 测试表注:表格中填写的是测试时间,单位μm.4.试解释两种算法在执行时间上的不同,并对两种算法进行算法分析。

【C语言源程序】#include <stdio.h>#include <time.h>Long Fib-rec(int n){if(n==0||n==1)return(1);else return(Fib-rec(n-1) + Fib-rec(n-2) );}long Fib-ite(int n){long fib1,fib2,fib;int i;fib1=1;fib2=1;for (i=3;i<=n,i + + ){fib=fib1+fib2;fib1=fib2;fib2=fib;}return fib;}void main ( ){clock-t us1, us2;int n;printf(“请输入n:\n”);scanf(“%d,&n);us1=clock( );printf(“递归函数计算结果:%1d\n”,Fib-rec(n) ); us2=clock( );printf(“递归函数执行时间%1d毫秒\n”,us2-us1);us1=clock( );printf(“非递归函数计算结果:%1d\n”,Fib-ite(n) ); us2=clock( );printf(非递归函数执行时间%1d毫秒\n”,us2-us1);}实验二顺序表的实现与应用实验目的:1.掌握线性表的概念。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《软件技术基础》实验指导书电子商务教研室2009年9月实验三队列的应用◆实验目的与基本要求1、掌握队列的顺序存储和链式存储结构。

2、掌握队列的特点。

3、掌握队列的基本运算。

◆实验条件1、硬件:一台微机2、软件:操作系统和C语言系统◆实验方法确定存储结构后,上机调试实现队列的基本运算。

◆实验内容1、写出队列的出队和入队算法。

2、设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已停放n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。

编制一个程序模拟该停车场的管理。

◆性质:必做◆类型:验证◆2h队列是从日常排队现象抽象出来的一种数学模型。

当然数据结构中的队列远没有生活中的排队灵活。

数据结构中的队列规定:数据只能从队尾进,从队首出来。

已经进入队列的数据次序不能再做改变。

这就叫做“先进先出”(FIFO)或者说“后进后出”(LILO)。

允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为队首,通常也用一个队首指针(front)指向队首元素的前一个位置(当然也可以直接指向队首元素,只是许多数据结构的书上都习惯这么定义)。

与队列类似,我们可以用一维数组来模拟队列这种数据结构,也可以用链表来模拟。

根据以上描述,队列可以可以有以下基本操作:1、创建初始化:按约定置队列为空状态。

2、入队列:在队尾加入一个新数据项。

3、出队列:从队首取出一个数据项,并使余下诸项向队首移动。

4、队列空:判断队列是否为空。

5、队列满:判断队列是否已满。

从概念上说,队列不存在“满”状态,其长度可以任意增加,但实现(不论静态或动态)中总有空间限制的。

下面我就来讨论用数组实现队列结构。

假定队列中元素的类型为T,队列的最大长度为queue_size,在任何一刻队列首、尾位置分别用下标head、tail指向。

队列初始状态应为:head=0,tail=-1。

根据队列定义,head值应恒为0,那么每当出队一个数据项,则必须执行多次移动操作(余下诸项向队首移动)。

显然不能直接采用这种结构实现队列。

解决这个问题,可以从数学取模运算联想到一个解决办法。

比如x=(x+1) mod 100 ,则x的变化范围在[0,99]之间,超过100的又从0,1开始。

这不就是我们所需要的嘛!许多书上把它叫作“循环数组”技术。

即当入队列时先移动tail(即tail=(tail+1) mod queue_size),出队列时先移动head(即head=(head+1) mod queue_size)。

在移动中,若head(或tail)值为queue_size-1,则移动后head(或tail)的值就变成0了,对这种特征就是一个环,只要数组有空间,就可以入队列。

用“循环数组”实现队列,必须注意怎样判断队列的空与满的状态。

除起始状态外。

任何时刻tail所指为最后一个进入队列的元素,而head所指的是刚刚出队列的那个元素原先所占的位置。

因此(head+1) mod queue_size才是真正当前队列中首元素位置。

采用条件:(tail+1) mod queue_size == head 作为“队列满”的判断条件。

实际上此时队列中还有一个空位置,这样队列的利用空间比定义的最大空间少一个单元。

假如把这个单元也利用上,则就不好判断“满”或“空”了(当head==tail),必须根据是tail追上了head,还是head追上了tail才能区分,这样给处理带来了不便。

#include <stdlib.h>#include <stdio.h>#define NULL 0typedef struct node{int data;}NODE;#define LEN sizeof(NODE)/*队列的需要变量*/typedef enum {false,true}bool; /*定义bool类型*/unsigned int head; /*定义队首下标变量*/unsigned int tail; /*定义队尾下标变量*/static NODE *queue=NULL; /*定义一个队列*/static unsigned int queue_size=0;/*队列的大小*//*========================功能:初始化队列的大小返回:true or false========================*/bool InitQueue(unsigned int size){queue=(NODE *)malloc(size*LEN); /*开辟空间*/ if (queue==NULL) /*开辟空间失败,则返回false*/{return false;}queue_size = size; /*保存队列空间大小值*/head = queue_size-1;/*队首下标赋初值*/tail = queue_size-1;/*队尾下标赋初值*/return true; /*初始化成功,返回true*/}/*======================功能:释放队列的内存返回:void======================*/void FreeQueue(){free(queue);/*注意:这一点很重要。

free()之后并不能将queue置为NULL,所以我们一定要自己做。

这样能防止产生“野指针”,即地址不确定的指针。

*/queue = NULL;}/*==========================功能:判断队列是否已满返回:true or false==========================*/bool Full(){return (((tail+1)%queue_size)==head);}/*===========================功能:判断队列是否为空返回:true or false===========================*/bool Empty(){return (head==tail);}/*========================功能:入队列返回:true or false========================*/bool Push(NODE p){if (!Full()) /*队列不满,则入队列;队尾下标要加1*/ {tail = (tail+1)%queue_size;queue[tail] = p;return true;}else{printf("queue is overflow !\n");return false;}}/*===================功能:出队列返回:出队列元素指针===================*/NODE *Pop(){if (!Empty()) /*队列不空,则出队列;队首下标要加1*/ {head = (head+1)%queue_size;return (&queue[head]);}else{printf("queue is empty !\n");return NULL;}}void main(void){NODE node1 = {3};NODE *p;if (!InitQueue(3)) /*初始化不成功,则退出*/{exit(0);}Push(node1);/*去掉下面的注释,你可以验证讲解中空间利用问题*//*Push(node1);Push(node1);Push(node1);*/p =Pop();printf("%d",p->data);FreeQueue(); /*注意程序退出时释放队列内存*/printf("\n");system("pause");}提示:可以停车场内的车辆管理,看做是堆栈,采用先进后出的运算规则;而在停车场外排队的车辆管理,可以看做是队列,采用先进先出的运算规则。

基本思想:根据题目要求,停车场只有一个大门,因此可用一个栈来模拟。

而当栈满后,继续来到的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,先排队的车辆先离开便道,进入停车场。

由于排在停车场中间的车辆可以提出离开停车场,并且要求在离开车辆到停车场大门之间的车辆都必须离开停车场,让此车辆离去,然后再让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要有一个地方保存为了让路离开停车场的车辆,很显然这也应该用一个栈来模拟,因此,本题中要用到两个栈和一个队列。

参考程序如下:#define N 2 /* 定义停车场栈长度 */#define M 5 /* M为单元时间的收费值 */#define True 1#define False 0#include “stdio.h”/* 存储结构 */typedef struct /* 定义栈元素类型 */{ int num;int arrtime;}elemtype;typedef struct /* 定义栈 */{ elemtype stack[N];int top;}sqstktp;typedef struct node /* 定义队列结点的类型 */{ int num;struct node *next;}queueptr;typedef struct /* 定义队列 */{ queueptr *front, *rear;}Linkedquetp;void inistack(sqstktp *s) /*初始化栈 */{ s->top=-1;int push(sqstktp *s, elemtype x) /* 数据元素x入指针s所指的栈 */ { if(s->top= = N-1)return(False); /* 如果栈满,返回False */else{ s->stack[++s->top]=x; /* 栈不满, x入栈 */return(True);}elemtype pop(sqstktp *s) /* 栈顶元素出栈 */{elemtype x;if(s->top<0){ x.num=NULL;x.arrtime=NULL;return(x); /* 如果栈空,返回空值 */}else{ s->top--;return(s->stack[s->top+1]); /* 栈不空,返回栈顶元素 */ }}实验四二叉树的应用◆实验目的与基本要求1、掌握指针变量,动态变量的含义。

相关文档
最新文档