1、数 据 结 构作 业 和 实 验 指 导 书数 据 结 构 课 程 组广 东 工 业 大 学 计 算 机 学 院2015 年 4 月- 1 -目 录第 1 章 概 述1.1 课 程 、 教 材 和 实 验1.2 作 业 和 实 验 安 排第 2 章 算 法 设 计 实 验 和 上 机2.1 数 据 结 构 习 题 概 述2.2 算 法 设 计 的 上 机 作 业 要 求2.3 算 法 设 计 上 机 作 业第 3 章 抽 象 数 据 类 型 的 实 现3.1 实 验 概 要3.2 实 验 目 的3.3 预 习 与 参 考3.4 实 验 要 求 和 设 计 指 标3.5 实 验 仪 器 设 备
2、和 材 料3.6 调 试 及 结 果 测 试3.7 考 核 形 式3.8 实 验 报 告 要 求3.9 思 考 题3.10 示 例第 4 章 课 程 设 计4.1 课 程 设 计 概 述4.2 课 程 设 计 时 间 和 内 容4.3 课 程 设 计 步 骤4.4 课 程 设 计 考 核 形 式 和 评 分 标 准- 3 -第 1 章 概 述1.1 课 程 、 教 材 和 实 验数 据 结 构 是 计 算 机 科 学 的 算 法 理 论 基 础 和 软 件 设 计 的 技 术 基 础 , 主 要 研 究 信 息 的 逻 辑 结 构 及其 基 本 操 作 在 计 算 机 中 的 表 示 和 实
3、现 。 数 据 结 构 不 仅 是 计 算 机 专 业 的 核 心 课 程 , 而 且 已 成 为 其 他理 工 专 业 的 热 门 选 修 课 。 课 程 的 教 学 要 求 之 一 是 训 练 学 生 进 行 复 杂 程 序 设 计 的 技 能 和 培 养 良 好 程序 设 计 的 习 惯 , 其 重 要 程 度 决 不 亚 于 知 识 传 授 。 因 此 , 在 数 据 结 构 的 整 个 教 学 过 程 中 , 完 成 习 题作 业 和 上 机 实 习 是 两 个 至 关 重 要 的 环 节 。习 题 的 作 用 在 于 帮 助 学 生 深 入 理 解 教 材 内 容 , 巩 固 基
4、本 概 念 , 达 到 培 养 良 好 程 序 设 计 能 力 和 习惯 的 目 的 。 从 认 知 的 程 度 划 分 , 数 据 结 构 的 习 题 通 常 可 分 为 三 类 : 基 础 知 识 题 、 算 法 设 计 题 和 综合 实 习 题 。 基 础 知 识 题 主 要 是 检 查 对 概 念 知 识 的 识 记 和 理 解 , 一 般 可 作 为 学 生 自 测 题 。 算 法 设 计题 的 目 的 是 练 习 对 原 理 方 法 的 简 单 应 用 , 多 数 是 要 求 在 某 种 数 据 存 储 结 构 上 实 现 某 一 操 作 , 是 数据 结 构 的 基 础 训 练
5、, 构 成 了 课 外 作 业 的 主 体 。 综 合 实 习 题 则 训 练 对 知 识 的 综 合 应 用 和 软 件 开 发 能力 , 主 要 是 针 对 具 体 应 用 问 题 , 选 择 、 设 计 、 和 实 现 抽 象 数 据 类 型 ( ADT) 的 可 重 用 模 块 , 并 以此 为 基 础 开 发 满 足 问 题 要 求 的 小 型 应 用 软 件 , 应 将 其 看 作 软 件 工 程 的 综 合 性 基 础 训 练 的 重 要 一 环 ,给 予 足 够 的 重 视 。本 实 验 指 导 书 为 采 用 自 编 教 材 的 数 据 结 构 课 程 而 编 写 : 吴 伟
6、 民 等 . 数 据 结 构 . 广 东 工 业 大学 计 算 机 学 院 , 2015.1。数 据 结 构 是 实 践 性 很 强 的 课 程 , 光 是 “听 ”和 “读 ”是 绝 对 不 够 的 。 在 努 力 提 高 课 堂 教 学 的同 时 , 必 须 大 力 加 强 对 作 业 实 践 环 节 的 要 求 和 管 理 。 国 内 外 先 进 院 校 一 般 都 要 求 修 读 数 据 结 构 的学 生 每 周 应 不 少 于 4 个 作 业 机 时 , 而 且 有 一 套 严 格 的 作 业 和 实 习 规 范 和 成 绩 评 定 标 准 , 形 成 行 之有 效 的 教 学 质
7、量 保 证 体 系 。 教 学 经 验 表 明 , 严 格 实 施 作 业 和 实 习 的 规 范 , 对 于 学 生 基 本 程 序 设 计素 养 的 培 养 和 软 件 工 作 者 工 作 作 风 的 训 练 , 将 能 起 到 显 著 的 促 进 作 用 。数 据 结 构 及 其 算 法 的 教 学 难 点 在 于 它 们 的 抽 象 性 和 动 态 性 。 虽 然 在 书 本 教 材 和 课 堂 授 课 ( 板书 或 投 影 胶 片 ) 中 采 用 图 示 可 以 在 一 定 程 度 上 化 抽 象 为 直 观 , 但 很 难 有 效 展 现 数 据 结 构 的 瞬 间 动态 特 性
8、和 算 法 的 作 用 过 程 。 我 们 自 主 研 发 的 “C 程 序 可 视 化 运 行 调 试 集 成 环 境 AnyviewC”, 以 及基 于 AnyviewC 开 发 的 数 据 结 构 、 C 程 序 设 计 、 离 散 数 学 等 课 程 的 “编 程 作 业 与 实 验 可 视 化 网 络平 台 ”, 打 破 了 程 序 运 行 调 试 黑 箱 。 学 生 可 通 过 AnyviewC 平 台 可 在 线 编 写 和 可 视 化 调 试 自 己 编 写的 程 序 , 并 接 受 系 统 的 实 时 自 动 测 评 , 极 大 提 高 了 学 生 程 序 设 计 训 练 的
9、 效 率 和 效 果 。 教 师 也 可 从繁 重 的 书 面 作 业 批 改 工 作 中 解 脱 出 来 , 转 到 有 针 对 性 的 现 场 指 导 和 习 题 讲 评 上 。 借 助 于 互 联 网 ,AnyviewC 平 台 将 实 验 室 “全 天 候 ”和 “跨 时 空 ”地 拓 广 到 每 位 学 生 个 人 的 微 机 或 移 动 终 端 上 。1.2 作 业 和 实 验 安 排根 据 教 学 计 划 , 本 学 期 数 据 结 构 课 程 进 行 首 轮 MOOC 教 学 试 验 :1 课 堂 理 论 课 40 学 时 。2 实 验 室 研 讨 课 16 学 时 。3 课
10、程 知 识 测 验 。 主 要 题 型 是 选 择 题 和 填 空 式 简 答 题 。 自 行 登 录 课 程 网 页 , 随 课 程 进 度 完 成测 验 。- 4 -4 算 法 设 计 作 业 和 上 机 实 验 ( 课 内 、 外 结 合 , 其 中 课 内 指 导 10 机 时 ) 。 在 “AnyviewC 编 程作 业 与 实 验 可 视 化 网 络 平 台 ”上 机 完 成 约 60 道 必 做 题 , 学 有 余 力 的 同 学 还 可 以 加 做 选 做题 。5 抽 象 数 据 类 型 的 实 现 ( 6 学 时 设 计 性 实 验 ) 。 实 现 一 组 抽 象 数 据 类
11、 型 , 并 对 所 采 用 的 存 储结 构 和 相 关 操 作 的 实 现 进 行 讨 论 。6 课 程 设 计 ( 一 周 综 合 性 实 验 ) 。- 5 -第 2 章 算 法 设 计 实 验 和 上 机2.1 数 据 结 构 习 题 概 述数 据 结 构 的 习 题 分 为 “基 础 知 识 题 ”和 “算 法 设 计 题 ”两 类 。在 课 程 网 站 上 , “基 础 知 识 题 ”主 要 供 学 生 进 行 自 测 和 复 习 之 用 , 目 的 是 帮 助 学 生 深 化 理 解 教科 书 的 内 容 , 澄 清 基 本 概 念 、 理 解 和 掌 握 数 据 结 构 中 分
12、 析 问 题 的 基 本 方 法 和 算 法 要 点 , 为 完 成 算法 设 计 题 做 准 备 。“算 法 设 计 题 ”则 侧 重 于 基 本 程 序 设 计 技 能 的 训 练 , 相 对 于 实 习 题 而 言 , 这 类 编 程 习 题 属 于偏 重 于 编 写 功 能 单 一 的 “小 ”程 序 的 基 础 训 练 , 然 而 , 它 是 进 行 复 杂 程 序 设 计 的 基 础 , 是 本 课 程习 题 作 业 的 主 体 和 重 点 。各 章 的 题 量 根 据 教 学 内 容 的 多 少 和 重 要 程 度 而 定 , 几 乎 对 教 科 书 的 每 一 小 节 都 安
13、排 了 对 应 的习 题 。2.2 算 法 设 计 的 上 机 作 业 要 求1 使 用 Anyview C 语 言 和 算 法 书 写 规 范 写 出 书 面 作 业 的 算 法 ( 函 数 ) , 作 为 上 机 前 的 准 备 。需 要 强 调 的 是 “算 法 的 可 读 性 ”。 初 学 者 总 是 容 易 忽 视 这 一 点 。 算 法 不 仅 是 开 发 程 序 的 基 础 ,还 是 一 种 在 程 序 设 计 者 之 间 交 流 解 决 问 题 方 法 的 手 段 。 因 此 , 可 读 性 具 有 头 等 的 重 要 性 。 不 可 读的 算 法 是 没 有 用 的 , 由
14、它 得 到 的 程 序 极 容 易 产 生 很 多 隐 藏 很 深 的 错 误 , 且 难 以 调 试 正 确 。 一 般 地说 , 宁 要 一 个 可 读 性 好 、 逻 辑 清 晰 简 单 、 但 篇 幅 较 长 的 算 法 , 也 不 要 篇 幅 较 小 但 晦 涩 难 懂 的 算 法 。算 法 的 正 确 性 力 求 在 设 计 算 法 的 过 程 中 得 到 保 证 , 然 而 一 开 始 做 不 到 这 一 点 也 没 多 大 关 系 , 可 以逐 步 做 到 。算 法 设 计 的 正 确 方 法 是 : 首 先 理 解 问 题 , 明 确 给 定 的 条 件 和 要 求 解 决
15、的 问 题 , 然 后 按 照 自 顶向 下 , 逐 步 求 精 , 分 而 治 之 的 策 略 逐 一 地 解 决 子 问 题 , 最 后 严 格 按 照 和 使 用 本 章 后 面 提 供 的 算 法书 写 规 范 和 类 C 语 言 完 成 算 法 的 最 后 版 本 。按 照 规 范 书 写 算 法 是 一 个 值 得 高 度 重 视 的 问 题 。 在 基 础 训 练 中 就 贯 彻 这 一 规 范 , 不 但 能 够 有助 于 写 出 “好 程 序 ”, 避 免 形 成 一 系 列 难 以 纠 正 且 遗 害 无 穷 的 程 序 设 计 坏 习 惯 , 而 且 能 够 培 养 软
16、件工 作 者 应 有 的 严 谨 的 科 学 工 作 作 风 。2 对 函 数 进 行 静 态 检 查 修 改 , 形 成 准 备 上 机 的 程 序 文 本 。多 数 初 学 者 在 编 好 程 序 后 处 于 以 下 两 种 状 态 之 一 : 一 种 是 对 自 己 的 “精 心 作 品 ”的 正 确 性 确信 不 疑 ; 另 一 种 是 认 为 上 机 前 的 任 务 已 经 完 成 , 查 纠 错 误 是 上 机 的 工 作 。 这 两 种 态 度 是 极 为 有 害的 。 事 实 上 , 非 训 练 有 素 的 程 序 设 计 者 编 写 的 程 序 长 度 超 过 50 行 时
17、, 极 少 不 含 有 除 语 法 错 误 以 外的 错 误 。 上 机 动 态 调 试 决 不 能 代 替 静 态 检 查 , 否 则 调 试 效 率 将 是 极 低 的 。静 态 检 查 主 要 有 两 种 方 法 , 一 是 用 一 组 测 试 数 据 手 工 执 行 程 序 ( 通 常 应 先 分 模 块 检 查 ) ; 二是 通 过 阅 读 或 给 别 人 讲 解 自 己 的 程 序 而 深 入 全 面 地 分 析 理 解 程 序 逻 辑 , 在 这 个 过 程 中 再 加 入 一 些注 解 和 断 言 。 如 果 程 序 中 逻 辑 概 念 清 楚 , 后 者 将 比 前 者 有
18、效 。3 在 “Anyview C 编 程 作 业 与 实 验 可 视 化 网 络 平 台 ”编 辑 提 交 程 序 , 并 在 系 统 的 自 动 测 试 和提 示 下 , 调 试 程 序 , 直 到 能 通 过 系 统 的 测 试 。“Anyview C 编 程 作 业 与 实 验 可 视 化 网 络 平 台 ”提 供 了 程 序 可 视 化 运 行 和 调 试 的 环 境 , 为 进行 数 据 结 构 教 学 的 师 生 提 供 了 算 法 设 计 作 业 程 序 的 可 视 化 自 动 测 试 环 境 。 可 在 该 集 成 环 境 编 辑 C源 程 序 , 并 对 其 进 行 可 视
19、 化 运 行 、 分 析 和 调 试 。 通 过 设 置 断 点 、 单 步 或 变 换 速 度 的 连 续 运 行 , 可在 多 个 窗 口 上 动 态 观 察 程 序 执 行 时 的 数 据 变 量 的 物 理 和 逻 辑 2D 或 3D 视 图 , 使 得 程 序 运 行 期 间 本来 不 可 见 的 程 序 对 数 据 的 处 理 过 程 和 数 据 之 间 的 动 态 抽 象 关 系 全 部 可 视 化 。 在 提 交 算 法 设 计 作 业- 6 -程 序 时 , 系 统 自 动 进 行 可 视 化 测 试 , 评 判 作 业 程 序 的 正 确 性 。 通 过 对 比 “标 准
20、结 果 视 图 ”和 “作业 结 果 视 图 ”, 作 业 者 可 对 自 己 的 程 序 进 行 直 观 的 分 析 和 排 错 。 关 于 该 作 业 系 统 的 使 用 , 请 参 阅 系统 的 帮 助 文 档 。在 调 试 过 程 中 可 以 不 断 借 助 系 统 的 可 视 DEBUG 的 各 种 功 能 , 提 高 调 试 效 率 。 调 试 中 遇 到 的各 种 异 常 现 象 往 往 是 预 料 不 到 的 , 这 时 不 应 “苦 思 冥 想 ”, 而 应 动 手 确 定 疑 点 , 通 过 修 改 程 序 来 证实 它 或 绕 过 它 。4 在 调 试 程 序 的 过 程
21、 中 , 做 好 调 试 笔 记 , 记 录 心 得 体 会 。调 试 正 确 后 , 认 真 整 理 源 程 序 及 其 注 释 , 记 录 带 有 完 整 注 释 的 且 格 式 良 好 的 源 程 序 清 单 和 结果 。一 道 算 法 设 计 作 业 文 档 包 括 :( 1) 上 机 前 编 写 并 经 过 静 态 检 查 的 程 序 文 本 ;( 2) 调 试 笔 记 ;( 3) 最 后 程 序 文 本 , 及 通 过 时 间 。- 7 -第 3 章 抽 象 数 据 类 型 的 实 现3.1 实验概要实验项目名称: 抽象数据类型的实现实验项目性质: 设计性实验所属课程名称: 数据结
22、构实验计划学时: 63.2 实验目的对某组具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。 进而达到熟练地运用本课程中的基础知识及技术的目的。3.3 预习与参考1确定要实现的抽象数据类型,并对基本操作做适当的选取和增加;2选择存储结构,并写出相应的类型定义;3设计各基本操作的实现算法,并表达为函数形式;4设计测试方案,编写主函数;5将上述 4 步的结果写成预习报告。3.4 实验要求和设计指标以教材中讨论的各种抽象数据类型为对象,利用 C 语言的数据类型表示和实现其中某个抽
23、象数据类型。可选的抽象数据类型如下表所列:编号 抽象数据类型 基本难度 存储结构1 栈和队列 1.0 顺序 和 链接2 线性表 1.0 顺序 和 链接3 哈希表 1.1 任选4 二叉树 1.2 任选5 堆 1.2 任选6 二叉排序树 1.2 任选7 平衡二叉树 1.3 任选8 树 1.2 任选9 并查集 1.2 任选10 B 树 1.4 任选11 有向图 1.3 任选12 无向图 1.3 任选13 有向带权图 1.3 任选- 8 -注:如果基本操作数量较多,可选择实现其中一个基本操作子集。实验要求如下:1首先了解设计的任务,然后根据自己的基础和能力从中选择一题。一般来说,选择题目应以在规定的时
24、间内能完成,并能得到应有的锻炼为原则。 若学生对教材以外的相关题目较感兴趣,希望选作实验的题目时,应征得指导教师的认可,并写出明确的抽象数据类型定义及说明。2. 实验前要作好充分准备,包括:理解实验要求,掌握辅助工具的使用,了解该抽象数据类型的定义及意义,以及其基本操作的算法并设计合理的存储结构。3. 实验时严肃认真,要严格按照要求独立进行设计,不能随意更改。注意观察并记录各种错误现象,纠正错误,使程序满足预定的要求,实验记录应作为实验报告的一部分。4. 实验后要及时总结,写出实验报告,并附所打印的问题解答、程序清单,所输入的数据及相应的运行结果。3.5 实验仪器设备和材料计算机学院实验中心。
25、编程环境:AnyviewCL 可视化编程环境、TC+、C+Builder、VC+或 Java。3.6 调试及结果测试调试内容应包括:调试过程中遇到的问题是如何解决的以及对实验的讨论与分析;基本操作的时间复杂度和空间复杂度的分析和改进设想。列出对每一个基本操作的测试结果,包括输入和输出,测试数据应完整和严格。3.7 考核形式考核形式以实验过程和实验报告相结合的方式进行。在实验完成后,应当场运行和答辩,由指导教师验收,只有在验收合格后才能算实验部分的结束。实验报告作为整个设计性实验评分的书面依据。设计性实验的成绩评定以选定题目的难易度、完成情况和实验报告为依据综合评分。从总体来说,所实现的抽象数据
26、类型应该全部符合要求,类型定义,各基本操作的算法以及存储结构清晰;各模快测试运行正确;程序的结构合理;设计报告符合规范。3.8 实验报告要求实验结束后要写出实验报告,以作为整个设计性实验评分的书面依据和存档材料。实验报告是反映学生实验效果的最主要的依据,也是学生正确地表达问题、综合问题和发现问题的能力的基本培养手段,因而是非常重要的内容。本设计性实验的报告要包括以下几项内容:(1)设计任务、要求及所用软件环境或工具;(2)抽象数据类型定义以及各基本操作的简要描述;(3)所选择的存储结构描述及在此存储结构上各基本操作的实现;(4)程序清单(计算机打印) ,输入的数据及各基本操作的测试结果;(5)
27、实验总结和体会。实验报告以规定格式的电子文档书写、打印并装订,排版及图表要清楚、工整。3.9 思考题对设计性实验进行总结和讨论,包括本实验的优、缺点,数据存储结构的特点,与其它存储结构之间的比较等。通过总结,可以对抽象数据类型有更全面、深入的认识,这是设计性实验不可缺少的重要内容。这部分内容应作为实验报告中的一个组成部分。- 9 -3.10 示例1. 题目采用字符类型为元素类型和无头结点单链表为存储结构,实现抽象数据类型 List。ADT List数 据 对 象 : D ai | aiElemSet, i=1,2,.,n, n0 数 据 关 系 : R1 |ai-1, aiD, i=2,.,n
28、 基 本 操 作 :SetEmpty(typedef char ElemType; /* 元素类型为字符类型*/(1) 顺序存储结构#define LIST_INIT_SIZE 20 /*线性表存储空间的初始分配量 */#define LISTINCREMENT 10 /*线性表存储空间的分配增量*/typedef structElemType *elem; /*存储空间基址*/int length; /*当前长度*/int listsize; /*当前分配的存储容量*/ SqList;(2) 无头结点单链表存储结构typedef struct LNode ElemType data;stru
29、ct LNode *next; LNode, *LList; /* 不带头结点单链表类型*/(3) 带头结点单链表存储结构typedef struct LNode /* 结点类型 */ElemType data;struct LNode *next; LNode, *Link, *Position;typedef struct LinkList /* 链表类型 */Link head,tail; /* 分别指向线性链表中的头结点和最后一个结点 */int len; /* 指示线性链表中数据元素的个数 */ LinkList;3. 算法设计(1) 顺序存储结构Status SetEmpty(Sq
30、List if(!L.elem)return OVERFLOW; /* 存储分配失败 */L.length=0; /* 空表长度为 0 */L.listsize=LIST_INIT_SIZE; /* 初始存储容量 */- 11 -return OK;Status Destroy (SqList L.elem=NULL;L.length=0;L.listsize=0;return OK;int Length(SqList L) /* 求表长*/return L.length;Status Get(SqList e=*(L.elem+i-1);return OK;int Locate(SqList
31、 L, ElemType x) /* 确定 x 在表中的位序 */ElemType *p;int i=1; /* i 的初值为第 1 个元素的位序 */p=L.elem; /* p 的初值为第 1 个元素的存储位置 */while(iL.length+1) /* i 值不合法 */return ERROR;if(L.length= L.listsize) /* 当前存储空间已满,增加分配 */newbase=(ElemType *) realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase) return O
32、VERFLOW; /* 存储分配失败 */L.elem=newbase; /* 新基址 */L.listsize+=LISTINCREMENT; /* 增加存储容量 */q=L.elem+i-1; /* q 为插入位置 */for(p=L.elem+L.length-1; p=q; -p) - 12 -*(p+1)=*p; /* 插入位置及之后的元素右移 */*q=e; /* 插入 e */+L.length; /* 表长增 1 */return OK;Status Delete(SqList if(i L.length) /* i 值不合法 */return ERROR;p= L.elem+
33、i-1; /* p 为被删除元素的位置 */e=*p; /* 被删除元素的值赋给 e */q= L.elem+L.length-1; /* 表尾元素的位置 */for(+p; pnext;free(q);q=L;return OK;int Length(LList L) /* 求表长*/int n=0;- 13 -while(L!=NULL) n+;L=L-next;return n;Status Get(LList L, int i, ElemType while (jnext;j+;if(L!=NULL) e=L-data; return OK; else return ERROR; /*
34、 位置参数 i 不正确 */int Locate(LList L, ElemType x) /* 确定 x 在表中的位序 */int n=1;while (L!=NULL n+;if (L=NULL) return 0;else return n;Status Insert(LList LList s,q;s=(LList)malloc(sizeof(LNode);s-data=e;q=L;if (i=1) s-next=q; L=s; return OK;else while(jnext!=NULL) q=q-next;j+;if (j=i-1) s-next=q-next;q-next=s
35、;return OK;else return ERROR; /* 位置参数 i 不正确 */- 14 -Status Delete(LList LList q=L,t;if (i=1) e=q-data;L=q-next;free(q);return OK;else while (jnext!=NULL) q=q-next;j+;if (q-next!=NULL q-next=t-next;e=t-data;free(t);return OK;else return ERROR; /* 位置参数 i 不正确 */void Display(LList L) /* 依次显示表中元素 */print
36、f(“单链表显示: “);if (L=NULL)printf(“链表为空!“);else if (L-next=NULL)printf(“%cn“, L-data);else while(L-next!=NULL) printf(“%c-“, L-data);L=L-next;printf(“%c“, L-data);printf(“n“);(3) 带头结点单链表Status SetEmpty(LinkList p=(Link)malloc(sizeof(LNode); /* 生成头结点 */- 15 -if(p) p-next=NULL;L.head=L.tail=p;L.len=0;ret
37、urn OK;elsereturn ERROR;Status Destroy(LinkList if(L.head!=L.tail) /* 不是空表 */p=q= L.head-next;L.head-next=NULL;while(p!=L.tail) p=q-next;free(q);q=p;free(q);free(L.head);L.head=L.tail=NULL;L.len=0;return OK;int Length(LinkList L) /* 返回线性链表 L 中元素个数 */return L.len;Status Get(LinkList L, int i, ElemTyp
38、e int j;if(iL.len)return ERROR;else p=L.head;for(j=1;jnext;e=p-data;return OK;- 16 -int Locate(LinkList L, ElemType x) /* 确定 x 在表中的位序 */int i=0;Link p=L.head;do p=p-next;i+; while(p /* 没到表尾且没找到满足关系的元素 */if (!p)return 0;elsereturn i;Status Insert(LinkList Link s,q;s=(Link)malloc(sizeof(LNode);s-data=
39、e;q=L.head;while(jnext!=NULL) q=q-next;j+;if (j=i-1) s-next=q-next;q-next=s;if (L.tail=q) L.tail=s;L.len+;return OK;else return ERROR; /* 位置参数 i 不正确 */Status Delete(LinkList Link q=L.head,t;while (jnext!=NULL) q=q-next;j+;if (q-next!=NULL q-next=t-next;e=t-data;- 17 -if(L.tail=t) L.tail=q; free(t);L
40、.len-;return OK;else return ERROR; /* 位置参数 i 不正确*/void Display(LinkList L) /* 依次显示表中元素 */Link p;printf(“单链表显示: “);if (L.head=L.tail)printf(“链表为空!“);else p=L.head-next;while(p-next!=NULL) printf(“%c-“, p-data);p=p-next;printf(“%c“, p-data);printf(“n“);4测试(1) 顺序存储结构SqList head; void main() /* 主函数 */ch
41、ar e,c;int i,n,select,x1,x2,x3,x4,m,g;SetEmpty(head);n=random(8); /* 随机产生表长 */for (i=1; i0 a; -91; +a*bc; +*15x2*8x; +*3x3*2x2x6 并 输 出 。( 2) 每 当 输 入 一 个 表 达 式 后 , 对 其 中 的 变 量 赋 值 , 然 后 对 表 达 式 求 值 。实 现 提 示 ( 1) 在 读 入 表 达 式 的 字 符 序 列 的 同 时 , 完 成 运 算 符 和 运 算 数 ( 整 数 ) 的 识 别 处 理 , 以 及 相 应的 运 算 。( 2) 在
42、识 别 出 运 算 数 的 同 时 , 要 将 其 字 符 形 式 转 换 成 整 数 形 式 。- 30 -( 3) 用 后 根 遍 历 的 次 序 对 表 达 式 求 值 。( 4) 用 中 缀 表 示 输 出 表 达 式 E 时 , 适 当 添 加 括 号 , 以 正 确 反 映 运 算 的 优 先 次 序 。选 做 内 容 ( 1) 增 加 求 偏 导 数 运 算 Diff(E,V) 求 表 达 式 E 对 变 量 V 的 导 数 。( 2) 在 表 达 式 中 添 加 三 角 函 数 等 初 等 函 数 的 操 作 。( 3) 增 加 常 数 合 并 操 作 MergeConst(E
43、) 合 并 表 达 式 E 中 所 有 常 数 运 算 。 例 如 , 对 表 达 式E=(2+3-a)*(b+3*4)进 行 合 并 常 数 的 操 作 后 , 求 得 E=(5-a)*(b+12)。题 目 10 内 部 排 序 算 法 比 较 ( 难 度 系 数 : 1.1)问 题 描 述 在 教 科 书 中 , 各 种 内 部 排 序 算 法 的 时 间 复 杂 度 分 析 结 果 只 给 出 了 算 法 执 行 时 间 的 阶 , 或 大 概执 行 时 间 。 试 通 过 随 机 数 据 比 较 各 算 法 的 关 键 字 比 较 次 数 和 关 键 字 移 动 次 数 , 以 取 得
44、 直 观 感 受 。基 本 要 求 (1) 对 以 下 6 种 常 用 的 内 部 排 序 算 法 进 行 比 较 : 起 泡 排 序 , 直 接 插 入 排 序 , 简 单 选 择 排 序 ,快 速 排 序 , 希 尔 排 序 , 堆 排 序 。(2) 待 排 序 表 的 表 长 不 小 于 100; 其 中 的 数 据 要 用 伪 随 机 数 产 生 程 序 产 生 ; 至 少 要 用 5 组 不 同的 输 入 数 据 作 比 较 ; 比 较 的 指 标 为 有 关 键 字 参 加 的 比 较 次 数 和 关 键 字 的 移 动 次 数 (关 键 字 交 换 计 为3 次 移 动 )。(3
45、) 最 后 要 对 结 果 作 出 简 单 分 析 , 包 括 对 各 组 数 据 得 出 结 果 波 动 大 小 的 解 释 。测 试 数 据 由 随 机 数 产 生 器 生 成 。实 现 提 示 主 要 工 作 是 设 法 在 已 知 算 法 中 的 适 当 位 置 插 入 对 关 键 字 的 比 较 次 数 和 移 动 次 数 的 计 数 操 作 。程 序 还 可 以 考 虑 几 组 数 据 的 典 型 性 , 如 , 正 序 、 逆 序 和 不 同 程 度 的 乱 序 。 注 意 采 用 分 块 调 试 的 方法 。选 做 内 容 (1) 增 加 折 半 折 入 排 序 , 二 路 插
46、 入 排 序 , 归 并 排 序 , 基 数 排 序 等 。(2) 对 不 同 的 输 入 表 长 作 试 验 , 观 察 检 查 两 个 指 标 相 对 于 表 长 的 变 化 关 系 。 还 可 以 对 稳 定 性 作验 证 。题 目 11 多 关 键 字 排 序 ( 难 度 系 数 : 1.0)问 题 描 述 多 关 键 字 的 排 序 有 其 一 定 的 实 用 范 围 。 例 如 : 在 进 行 高 考 分 数 处 理 时 , 除 了 需 对 总 分 进 行 排序 外 , 不 同 的 专 业 对 单 科 分 数 的 要 求 不 同 , 因 此 尚 需 在 总 分 相 同 的 情 况
47、下 , 按 单 科 的 分 数 排 出 考生 录 取 的 次 序 。基 本 要 求 ( 1) 假 设 待 排 序 的 记 录 数 不 超 过 1000, 表 中 记 录 的 关 键 字 数 不 超 过 5, 各 个 关 键 字 的 范 围均 为 0 至 100。 按 用 户 给 定 的 进 行 排 序 的 关 键 字 的 优 先 关 系 , 输 出 排 序 结 果 。( 2) 约 定 按 LSD 法 进 行 多 关 键 字 的 排 序 。 在 对 各 个 关 键 字 进 行 排 序 时 采 用 两 种 策 略 : 其 一是 利 用 稳 定 的 内 部 排 序 法 , 其 二 是 利 用 “分 配 ”和 “收 集 ”的 方 法 。 并 综 合 比 较 这 两种 策 略 。测 试 数 据 由 随 机 数 产 生 器 生 成 。实 现 提 示