数据结构实训题目(2010年)

数据结构实训题目(2010年)
数据结构实训题目(2010年)

一、停车场管理

仅仅认识到栈和队列是两种特殊的线性表是远远不够的,本次实习的目的在于使读者深入了解栈和队列的特征,以便在实际问题背景下灵活运用它们;同时还将巩固这两种结构的构造方法,接触较复杂问题的递归算法设计。

[问题描述]

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满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)排序:按不同关键字,对所有员工的信息进行排序。

(2)查询:按特定条件查找员工。

(3)更新:按编号对某个员工的某项信息进行修改。

(4)插入:加入新员工的信息。

(5)删除:按编号删除已离职的员工的信息。

[选作内容]

实现图形用户界面。

三、校园导游程序

[问题描述]

用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。

[基本要求]

(1)查询各景点的相关信息;

(2)查询图中任意两个景点间的最短路径。

(3)查询图中任意两个景点间的所有路径。

(4)增加、删除、更新有关景点和道路的信息。

[选作内容]

(1)求多个景点的最佳(最短)游览路径。

(2)区分机动车道和人行道。

(3)实现导游图的仿真界面。

四、编写一个杂货店排队模拟程序。

该模拟程序中包含多个队列,可以使用队列数组来模拟这些队列。假设杂货店共5条收银线,顾客可随机进入支付。顾客会进入最短的队伍,如果队伍一样长,那么选择最靠近的一个队伍。每次交易完成所消耗的时间也是随机的。

完成一些额外工作,扩展杂货店排队程序,使得客户可以:

?如果所有队伍都一样长,可以选择不排队。

?如果等待超过了某个时间,可以离开队伍。

?在给定的时间间隔内,检查另一个队伍是否更短。

?如果另一个队伍更短,则切换队伍。

五、猜动物

猜动物:假设你是一个动物,程序问问题试图猜出你是哪种动物。如果程序的猜测正确,就开始另一轮游戏。如果程序不能断定你是哪种动物,你就提供一些信息给程序以使下次再玩游戏时,程序会聪明一点儿。

举例:假设你现在是一只浣熊(raccoon)。游戏开始

***** 猜动物游戏 *****

程序:请在心里想好一种动物,让我来猜一猜

你是哺乳动物吗?'

用户:y

程序:你比猫大吗?

用户:y

程序:我猜是袋鼠,我猜的对吗

用户:Y

程序:我猜对了!

程序:继续玩吗?

用户:Y

(再完一次)

程序:你是哺乳动物吗?'

用户:Y

程序:你比猫大吗?

用户:Y

程序:我猜是袋鼠,我猜的对吗

用户:N

程序:我认输了,你是什么?

用户:浣熊

程序:请键入一个问题,便得通过此问题可以将袋鼠和浣熊区分开.

用户:你有大口袋吗?

程序:对于浣熊你有大口袋吗?(Y/N)

用户:N

程序:噢,我明白了

程序:退出游戏吗?

……

这样你就给程序提供了一个以后可以区分袋鼠和浣熊的问题。

程序使用的数据存储在一棵二叉树中,每个非叶子结点包含一个问题。当程序开始后,它只知道4种动物。

根结点的问题是“是哺乳动物吗?”。

如果是,左子树的问题是“比猫大吗?”,

如果是,答案是袋鼠,否则,答案是老鼠

否则,不是哺乳动物,问“生活在水中吗?”

如果是,答案是鳟鱼,否则,答案是知更鸟

如果叶子结点包含正确的动物,一切都好。如果猜的不对,程序将从用户那里引出信息,并用这些信息改进二叉树。

主要功能函数:

(1)建立初始状态的二叉树

(2)猜策过程

(3)学习过程,若猜测失败,扩展叶结点

六、硬币游戏

在游戏开始之前,在桌上将三个硬币放置成一条直线。游戏开始的时候,中间一个硬币是背面朝上,其他两个硬币是正面朝上。游戏目标是改变硬币的摆放形式,让中间一个硬币正面朝上,其他两个硬币背面朝上。具体规则如下:(1)任何时候都能翻转中间的硬币(从正面翻成背面或相反)

(2)当另外两个硬币都是正面或都是背面的时候能够翻转一端的硬币(从正面翻成背面或相反);

不能通过任何其他方式翻转硬币,如平移它们。但是,只要满足这些规则,你就能够翻转硬币。

(提示:使用无向图,图中每个顶点代表三个硬币的一种状态(8种状态对应8个顶点,一个状态可用一个字符串表示,如”+ - +”表示了一个中间一个硬币是背面朝上,其他两个硬币是正面朝上的状态);当使用其中一条规则能在两个状态之间来回移动时,就通过一个边连接无向图的两个顶点。

该游戏使三个硬币从一种状态改变成另外一种状态,其实就是查找相应两个顶点之间路径的问题,该路径只能沿着边进行。)

七、编写程序帮助旅游者找出从一个城市到另一个城市的最短旅行

路径。

该程序应该读取一个包含了一个城市列表和一个连接城市的路径列表的数据文件。每个城市信息包含城市名称、城市级别(首都、直辖市、省会、地极市、县级市),每条路径包含两城市之间的距离、最低费用、最少花费时间。

程序功能要求:

(1)能进行城市信息的修改

(2)能进行城市之间路径的修改

(3)能按满足不同用户的查询,如自费旅游的人希望费用最省,因公出差的人希望花费时间最少等。

某两地之间的最低费用路线(自费旅游的人)

某两地之间的花费时间最少路线(因公出差的人)

某两地之间的距离最短的路线(自己开车出行的人)

八问题描述:设计哈希表实现电话号码查询系统。

基本要求:

1、设每个记录有下列数据项:电话号码、用户名、地址;

2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;

3、采用再哈希法解决冲突;

4、查找并显示给定电话号码的记录;

5、查找并显示给定用户名的记录。

6、在哈希函数确定的前提下,尝试各种不同类型处理冲突的方法(至少两种),考察平均查找长度的变化。 九 哈夫曼编码/译码器

设字符集为26个英文字母,其出现频度如下表所示。先建哈夫曼树,再利用此树对报文“This program is my favorite ”进行编码和译码。

51 48 1 15 63 57 20 32 5 1 频度

z y x w v u t 字符

1

16

1

18

8

23

80

频度

p 21 f q 15 g r 47 h s o n m l k j 字符 57 103 32 22 13 64 186 频度 i e d c b a 空格 字符

数据结构实训题1

题1:停车场管理系统 目的: (1)掌握栈和队列的建立。 (2)掌握栈和队列的基本操作。 (3)深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。 (4)加深对栈和队列的理解和认识。 内容: 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。 要求: (1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。 (3)对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。 题3:图的遍历演示(限1个人1组) 目的: (1)理解图的基本概念,熟悉图的各种存储结构及其构造算法。 (2)掌握图的遍历方法。 内容: 实现图的深度优先、广度优先遍历算法,并输出原图结构及遍历结果。 要求: (1)两种遍历方法必须都要实现,写出画图的思路。 (2)界面友好,函数功能要划分合理。 (3)总体设计应画一流程图。 (4)程序要加必要的注释。 (5)提供程序测试方案。 题4:交通咨询系统设计 目的: (1)熟练掌握迪杰斯特拉算法和费洛伊德算法,能够利用它们解决最短路径问题。 (2)能够解决工程项目实施过程中的关键路径问题。

数据结构实训报告

《数据结构与算法分析》 课程设计 题目:文字处理程序(字符串的应用) 学生姓名:林武祥 学号:16230243008 专业班级: B16软件工程1班 指导教师:颜慧 学院: 大数据与计算机学院 2017年12月

目录 一、课程设计题目 (1) 二、开发背景 (1) 三、项目总体设计 (1) 3.1需求分析 (1) 3.2系统功能模块设计 (1) 四、详细实现步骤和流程图 (2) 4.1功能实现展示 (2) 4.2流程图框架 (4) 五、部分具体代码分析及实现 (5) 六、项目总结 (9) 七、参考文献 (9)

一、课程设计题目 文字处理程序(字符串的应用)及简单文本编辑器 二、开发背景 由于对于现在的电脑族对电脑的使用频率逐年增大,对电脑的需要具有依赖性。其中不乏有对文本的编辑的需求,因此,本次实训周做了一款简单的文本编辑器的应用程序,对文本编辑器的相关功能做了一定的实现,既简单又实用。 本软件为一个简单而且很实用的文本编辑的工具,不但可以进行一些文字的输入和文本的读取,而且,该文本编辑器也可以对文本进行一些保存、另存、剪切、粘贴、删除等常规的操作,是一款比较适合广大普通用户和非计算机专业的用户和文本编辑的处理软件,本软件不但界面友好,功能齐全,而且操作简单。 三、项目总体设计 3.1需求分析 文字处理程序运行后弹出文本编辑器的主界面,由键盘输入或以打开的方式输入或显示文本文件内容。其中程序基本操作:包括文本的复制、粘贴、剪切、删除、查找、替换等功能。统计功能:分别统计出文本文件中的各类字符的个数,包括英文字母个数、空格个数、汉字个数、标点符号个数、总字数等并显示统计信息;允许用户统计某一字符串在文章中出现的次数,并显示统计信息;加密和解密:用户可对指定文本文件进行加密和解密操作;用户可保存该文件。 3.2系统功能模块设计

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

2014数据结构实训题目

以下共14个题目,同一个班上做同一个题目的人数最多3个题目一、停车场模拟程序 题目二、杂货店排队模拟程序 如果有朋友正在排队,则可以插队。 题目三、哈希表存储的电话号码查询 基本要求:

?设每个记录有以下数据项:用户名、电话、地址; ?从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表; ?采用两种不同的方法解决冲突; ?查找并显示给定电话号码的记录。 题目四、交通咨询模拟系统(A) 基本要求: ?系统中记录了城市和连接城市路径的信息 ?每条路径包含两个城市间的距离、最低费用和最少花费时间 ?能进行城市信息的修改 ?能进行城市之间路径的修改 ?能够满足不同用户的查询,如:两地之间的最低费用路线、花费时间最少路线和距 离最短路线 题目五、哈夫曼编码和译码(A) 基本要求: ?输入为:一段英文或中文的文章(原文) ?对输入的文章构造哈夫曼树 ?生成对应的编码 ?输出为:原文所对应的编码(译文) ?根据已经生成的编码表,输入任意的译文可以得到对应的原文 题目六、舞伴配对问题 基本要求: ?所有参加舞会的人按性别分为两队 ?排队的先后次序,按不同规则可分为:时间先后、从高到矮 ?第一轮舞曲开始的时候,舞场上最多容纳N对舞者,则两队中的前N个可以在舞 场上跳舞,其余人员等待下轮舞曲开始后才能进入舞场。第一轮舞曲结束后,前N个挑完舞曲的人可以选择离开或是继续排队等待跳舞。 题目七、表达式求值问题 基本要求: ?输入为:任意的中缀表达式 ?对输入表达式做合法性判断,不合法的如:(a+b ,a++b等 ?对合法的表达式进行中缀转后缀的处理 ?再对后缀表达式进行计算 ?输出整个表达式的值 题目八、约瑟夫生者死者游戏

数据结构课实训报告报告

数据结构实训报告 题目: 用C 实现外部流文件的引用 一、课程设计题目: 二、问题描述: 1、外部流文件的引用。 2、输入,输出控件化。 三、问题分析 以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么? 我们小组认为,本题的要求是在于用JAVA 实现对外部数据库的调用,更新,排序以及删除。在一开始,我们打算用本学期所学习的数据结构方面的知识再结合上学期所学的JAVA 控件知识来实现这道题目(见图) ,但是在调试过程中遇到了很大的问题,不得不中

途换别的方式进行算法实现。

并明确规定: 1、输入的形式和输入值的范围;数据库表格的形式输入,并依照数据库表格字段值的规定来规定输入值。 2、输出的形式;用JAVA语言来进行窗口式的调用。 3、程序所能达到的功能;在JAVA界面进行对外部数据库的简单应用。比如进行查询,更新,排序以及删除。 4、算法涉及的基本理论分析:窗口界面是基于事件的程序,用户对具体图形组件的选择和激活,产生事件。在程序中创建监听器类并注册事件,并实例化。 5、题目研究和实现的价值。我们小组认为,本题的研究价值在于,此题目设计多个程序的跨平台应用,通过JAVA程序对数据库的加载和调用,实现后台调用和操作数据库。实现的价值是,通过这个简单的程序初步认识到编程这项工作在将来的程序开发中的作用和价值。

四、算法设计 1、概要设计 阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。 因为涉及到外部文件流的引用,所以我们小组进行的方式是用JAVA命令式的程序对数据库进行创建,删除,插入以及查找。 我们用了四个小程序来进行对数据库的调用,分别是见图。 2、详细设计 (1)实现概要设计中定义的所有数据类型;货号(char),品名(char),进口(boolean),单价(integer),数量(integer),开单日期(date),生产单位(char)。 (2)所有函数的接口描述;ListSelectionListener,WindowListener,处理窗口时间的监听器类。 (3)所有函数的算法描述(只需要写出伪码算法);函数为调用数据库和对数据库操作以及构造用户图形界面。 (3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图、N –S 图或PAD图进行描述;操作数据库的主程序为两个类,其中try类是对数据库进行加载桥接以及创建,catch类是依照算法的健壮性,对错误情况的处理。 (4)画出函数的调用关系图。无。 五、算法实现 创建数据表程序J_AccessCreateTable import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class J_AccessCreateTable{

最新数据结构实训总结

精品文档 这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。从刚开始得觉得很难,到最后把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在,才发现只要认真做,没有什么不可能。 编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体现出来了,因为它说明错误的时候都是英语)遇到问题要去查相关的资料。反复的调试程序,最好是多找几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个注意的问题要想到;同时要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。另外,要注意符号的使用,注意对字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针的初始化不管它怎么用以免不必要麻烦。 通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论的很好的连接。特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。实训过程中让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解,也形成了一定的个人做事风格。 通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用for的多重循环,舍弃多余的循环,提高了程序的运行效率。在编写这个程序的过程中,我复习了之前学的基本语法,哈弗曼树最小路径的求取,哈弗曼编码及译码的应用范围,程序结构算法等一系列的问题它使我对数据结构改变了看法。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,也从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 精品文档

数据结构实验总结报告

数据结构实验总结报告 李博杰PB10000603 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。 ①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。

数据结构实训题

实训题多维数组的应用 一、实训目的 1.掌握多维数组数据类型的描述及特点。 2.掌握多维数组的顺序和链式两种存储结构的特点及算法描述。 3. 掌握稀疏矩阵在两种不同存储结构上的算法实现。 二、实训内容 1.建立系数矩阵的十字链表并输出。 2.用十字链表实现系数矩阵的相加。 3.用三原数组实现稀疏矩阵的转置。 三、算法描述 #include struct linknode { int i,j; linknode *cptr,*rptr; union { int v; linknode *next; }k; }; linknode *creatlindmat() { int m,n,t,s,i,j,k; linknode *p,*q,*cp[100],*hm; cout<<"请输入稀疏矩阵的行数、列数及非零元的个数"<>m>>n>>t; if(m>m) s=m; else s=n; hm=new linknode; hm->i=m;hm->j=n; cp[0]=hm; for(i=1;i<=s;i++) { p=new linknode; p->i=0; p->j=0; p->rptr=p;p->cptr=p; cp[i]=p; cp[i-1]->k.next=p; } cp[s]->k.next=hm; for (int x=1;x<=t;x++)

{ cout<<"请输入一个三元组(i,j,v)"<>i>>j>>k; p=new linknode; p->i=i;p->j=j;p->k.v=k; q=cp[i]; while((q->rptr!=cp[i])&&(q->rptr->jrptr; p->rptr=q->rptr; q->rptr=p; q=cp[j]; while((q->cptr!=cp[j])&&(q->rptr->icptr; p->cptr=q->cptr; q->cptr=p; } return hm; } void main() { linknode *p,*q; linknode *hm=NULL; hm=creatlindmat(); cout<<" 输出十字链表"<k.next; while(p->k.next!=hm->k.next) { q=p->rptr; while(q!=p) { cout<<"("<i<<" "<j<<" "<k.v<<")"; q=q->rptr; } cout<k.next; } }

数据结构实习报告

数据结构课程设计报告 学生姓名:孔令周 指导老师:陈占龙 班级:116102 学生学号:021

实习题目一 1.需求规格说明书 设停车场是一个可停放n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停 车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n 辆汽车,则后来的汽车只能在门外的便道上等 候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 2.总体分析与设计 【设计思想】 在内存中实现,无需外存的流处理过程。主要的算法思想是栈和队列的使用。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号以及到达或离去的时刻。对每一组输入的数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【设计表示】 【详细设计表示】 主函数开始时要求用户输入停车场的初始大小,然后对进入的车辆进行管理,如果是进入,调用添加函数,此函数中定义的规则是如果停车场如果没有满就加到停车场栈中,如

果停车场已经满了,就添加到走道队列中。处理完添加函数后while循环调用次过程。同理,如果是车辆要出去,就调用删除函数,如果删除后走道上有车在等待车位就将走道上的车辆根据先进先出的规则压到栈中。处理完删除函数之后也while循环调用次过程。只有当用户输入结束的时候此循环才会结束。 3.编码 1.输入A表示的是添加,输入D表示删除,输入E表示结束,那么要是用户不小心输入了其他的一个字母怎么办呢在while循环中最开始进行判断的并不是输入的是否为ADE而是输入的是不是不是ADE中间的任何一个,这时候令输入无效,用户需重新输入。此时的输入作废。 2.添加的时候如果是栈没有满,这时应该添加到栈中去,储存进入时间和车号,但是如果只是停在走道上需不需要这些数据呢这里要不要抖没有关系,因为在这里如果要了的话在后面闪出部分走道上的车子重新进入的时候就重新记录一遍车子的进入时间,避免在走道上的时间也要被收费。 3.删除的时候将此时的时间减去车子这个数据对象的进入时间就是时间差,根据规定的单价计算停车费用。但是如果走道上有车子的时候他的进入时间呢处理时一定的,一定要更新,否则车子在走道上的时间也总算在停车场的时间这是不对的。 4.如果在停车场中要出去的车是先进来的车子,则表示比他后来的车要先出去那此时的算法呢答案是也将前面的车先存在一个栈中,等向后面的车子先出去后在出栈重新压栈。 4.程序算分分析 【运行结果】

2018数据结构实训题目

以下共15个题目,同一个班上做同一个题目的人数最多3个,每人必须独立完成。题目一、停车场模拟程序 题目二、杂货店排队模拟程序 如果有朋友正在排队,则可以插队。 题目三、哈希表存储的电话号码查询

基本要求: ?设每个记录有以下数据项:用户名、电话、地址; ?从键盘输入各记录,以电话号码为关键字建立哈希表; ?采用链地址法方法解决冲突; ?能够查找并显示给定电话号码的相关记录。 题目四、信科校园导游咨询模拟系统 基本要求: ?系统中记录了校园中的教学楼、图书馆、食堂、田径场、篮球场、超市、医务室等 坐标信息和连接这些坐标的路径信息 ?每条路径包含两个坐标间的距离和预计消耗的卡路里 ?能进行坐标点的增加和删除 ?能够满足不同用户的查询,如:两坐标之间的最高卡路里路线和最短距离路线 题目五、哈夫曼编码和译码 基本要求: ?输入为:一段英文或中文的文章(原文) ?对输入的文章构造哈夫曼树 ?生成对应的编码 ?输出为:原文所对应的编码(译文) ?根据已经生成的编码表,输入任意的译文可以得到对应的原文 题目六、舞伴配对问题 基本要求: ?所有参加舞会的人按性别分为两队 ?排队的先后次序,按不同规则可分为:时间先后、从高到矮的顺序 ?第一轮舞曲开始的时候,舞场上最多容纳N对舞者,则两队中的前N个可以在舞 场上跳舞,其余人员等待下轮舞曲开始后才能进入舞场。第一轮舞曲结束后,前N个挑完舞曲的人可以选择离开或是继续排队等待下一轮舞曲开始后跳舞。 题目七、表达式求值问题 基本要求: ?输入为:任意的中缀表达式 ?对输入表达式做合法性判断,不合法的如:(a+b ,a++b等 ?对合法的表达式进行中缀转后缀的处理 ?再对后缀表达式进行计算 ?输出整个表达式的值,如:(—2+3)*4 = 4 题目八、基于双向链表的约瑟夫生者死者游戏

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构实验报告全集

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。(3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件

#include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表 nodetype *create()//建立单链表,由用户输入各结点data域之值, //以0表示输入结束

{ elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束

数据结构实训

高职学院 计算机专业类 课程设计报告 (2012 -2013学年第1学期) 课程设计类型:数据结构 题目:栈+串+队列+线性表+后缀表达式求值 学号: 姓名: 专业:计算机应用技术 指导教师: 课程设计日期:高职学院制 目录 1. 问题分析..................................... 错误!未定义书签。

问题描述·················错误!未定义书签。 要求分析·················错误!未定义书签。 2. 总体设计..................................... 错误!未定义书签。 功能分析·················错误!未定义书签。 3. 详细设计..................................... 错误!未定义书签。 程序结构图················错误!未定义书签。 程序流程图················错误!未定义书签。 4. 功能测试..................................... 错误!未定义书签。 本系统的主界面··············错误!未定义书签。 栈子系统界面···············错误!未定义书签。 串子系统界面···············错误!未定义书签。 队列子系统界面··············错误!未定义书签。 线性表子系统界面·············错误!未定义书签。 后缀表达式求值子系统界面·········错误!未定义书签。 退出系统·················错误!未定义书签。 5. 课程设计小结................................. 错误!未定义书签。参考文献..................................... 错误!未定义书签。附录:源代码清单................................ 错误!未定义书签。

数据结构实习心得(体会心得)

数据结构实习心得 数据结构实习的过程中,自身的实习心得是十分的重要的,这关系到你是否能在实习中学到知识。数据结构实习心得是为大家精心整理的,欢迎大家阅读。第一篇:数据结构实习心得 本次课程设计,使我对《数据结构》这门课程有了更深入的理解。《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。 我的课程设计题目是线索二叉树的运算。刚开始做这个程序的时候,感到完全无从下手,甚至让我觉得完成这次程序设计根本就是不可能的,于是开始查阅各种资料以及参考文献,之后便开始着手写程序,写完运行时有很多问题。特别是实现线索二叉树的删除运算时很多情况没有考虑周全,经常运行出现错误,但通过同学间的帮助最终基本解决问题。 在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。培养了基本的、良好的程序设计技能以及合作能力。这次课程设计同样提高了我的综合运用所学知识的能力。并对VC有了更深入的了解。《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。上机实习一方面能使书本上的知识变活,起到深化理解和灵活掌握教学内容的目的;另一方面,上机实习是对学生软件设计的综合能力的训练,包括问题分析,总体结构设计,程序设计基本技能和技巧的训练。此外,还有更重要的一点是:机器是比任何教师更严厉的检查者。因此,在数据结构的

学习过程中,必须严格按照老师的要求,主动地、积极地、认真地做好每一个实验,以不断提高自己的编程能力与专业素质。 通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。需要多花时间上机练习。这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。 总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。 第二篇:数据结构实习心得 经过长时间对国贸软件的的使用,在不断练习操作的过程中,我对国贸软件的最深刻感觉是:学以致用、有趣、必须细心耐心反应迅速。 1.学以致用 作为国贸专业,经过长时间的理论学习,急需通过实际操作或某种近似于实际操作的平台对所学的理论知识加以实践,以求进一步掌握和巩固,而国贸软件正提供了这样一种平台。该软件涉及了及出口贸易的各个方面和环节,从外贸公司的经营运作到实际的进出口业务流程,都能进行模拟实训。在使用过程中,会遇到很多国贸的基础理论知识和实务技能,这是对国贸理论掌握程度的最好考察。眼过千遍不如手过一遍,相对于理论部分而言,国贸实务更注重实际操作,通过这种理论结合实践的方式,巩固基础知识,查找理论学习的不足,以前学习的实物理论基础知识会更加的具体和直观。同时,该软件的实务操作部分与报关员报关实务所涉及的知识基本一致,这对于我的报关员考试复习提供了很大的帮助。

数据结构实训-学生分配问题

淮阴工学院 算法设计技能训练实习报告 题目:学生搭配问题 系(院): 计算机工程学院 专业:微软 班级:计1137 学号:1131317726 姓名:陆炎炜 指导教师:周海岩 学年学期:2014 ~ 2015 学年第1 学期 2015年1月1 日

算法设计技能训练任务书 课题 名称 学生搭配问题 设计目的1、通过算法设计技能训练,深入理解算法设计的意义和重要性,更好地掌握 算法设计的知识。 2、能够针对某一具体问题,设计算法进行解决。 3、锻炼实践动手能力,提高解决问题的能力。 实验环境硬件:1、PC机,奔腾Ⅳ以上CPU,512MB以上内存,80G以上硬盘;软件:Visual C++编程工具 任务要求1、应用数据结构基础知识进行实际问题求解与分析 2、作为一个完整的系统,应具有友好的界面和较强的容错能力 3、上机能正常运行代码 4、分析算法的运行效率 5、按要求撰写课程设计报告和设计总结 工作进度计划 序号起止日期工作内容 1 2014.12.29 任务下达,查阅文献资料 2 2014.12.29~2014.12.31 总体设计、素材搜集、课题详细设计、调试 3 2014.12.31~2015.1.3 完善设计、撰写报告 4 2015.1.4 答辩 指导教师(签章): 年月日

摘要 针对学生搭配问题,循环队列是一种重要的链式结构,其特殊性在于需附设两个指针front和rear分别指示对头元素及队尾元素的位置且对头和队尾相邻接。在程序的设计过程中,运用了各种基本的算法,有判断队空及队满,出队,入队等.循环队列是在队列的顺序存储结构中,除了用乙组地址连续的存储单元依次存放从队列头到队列尾的元素外,尚需附设两个指针front和rear分别指示队列头元素和队列尾元素的位置。学生搭配问题是典型的只有采用循环队列才能解决的问题,实验表明该算法的空间复杂度优于其他算法。 本文用循环队列会很好的把这个程序设计出来,会有很好的效果。得出的程序运行结果能够很形象的把结果表示出来。 关键词:学生搭配数据结构循环队列

1202数据结构课程实训方案

数据结构课程设计 一、数据结构课程设计要求 学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。 课程设计按照教学要求需要一周时间完成,两周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时 二、数据结构课程设计的具体内容 本次课程设计完成如下模块(共5个模块,学生可以在其中至少挑选3个功能块完成,但有**号的模块是必须要选择的,多做可以加分) 1、joseph环 ** 任务:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。测试数据: m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么? 要求: 输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。 输出形式:建立一个输出函数,将正确的输出序列 2、迷宫求解** 任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出; 要求: 在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法; 3、单词统计系统 功能:输入文本和单词集,程序可以统计出词集中各个单词出现的次数,出现位置所在行的行号,同一行出现两次的只输出一个行号。 要求:文本串非空且以文件形式存放,统计匹配的词集非空。文件名和词集均由用户从键盘输入;“单词”定义:由字母构成的字符序列,中间不含空格符且区分大小写;待统计的“单词”在文本串中不跨行出现,它或者从行首开始,或者前置以一个空格符;存储结构使用线性表,分别用几个子函数实现相应的功能; 测试数据:文本文件为本次实习中的word.c;待统计的词集为: int char for while return struct。 输出:分行输出每个单词出现的次数和出现位置所在行的行号,同一行出现两次的只输出一个行号。

数据结构与实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h" //栈的头文件,没有用上 typedef int ElemType; //数据类型 typedef int Status; //返回值类型 //定义二叉树结构 typedef struct BiTNode{ ElemType data; //数据域 struct BiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; int InsertBST(BiTree &T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTree CreateBST(int a[],int n){//创建二叉树函数 BiTree bst=NULL; int i=0; while(i

相关文档
最新文档