算法与数据结构

发布 2021-05-02 16:34:28 阅读 5198

学院专业姓名学号。

实验1:线性表的操作(12学时)

问题描述]假设一个班级内有n个学生,定义一个学生类和一个班级类。学生类中包括学号、姓名、性别、年龄、专业等属性;班级类包括一个学生对象链表。定义如下:

class student

class myclass{

student *stu_head; /链表表头指针。

int total; /学生总数。

char manager[20];/班主任姓名。

public:

myclass()/创建新班,学生数为0

void insertstu(student s); 在班内中插入学生 s,插入后保持学号没有重复并且按学号递增。

void deletestu(int i) ;删除学号为i的学生。

void display();显示班内所有学生的信息和其它信息。

void search(int i);/按照学号i 查找学生,并输出其信息。

void search( char *s); 按照姓名查找学生,如果有重名的学生,则输出所有学生。

void join(myclass &class2 );将class2班合并到本班,合并后保证学号没有重复并且按学号递增。

void seperate(myclass &c1,myclass &c2);/按照性别分成两个班c1和c2

/ 其它方法。

[实验目的]

1) 掌握链表的基本操作。

2) 熟练类的定义以及类之间的关系。

实验内容及要求]

1)实现myclass类中所列出的方法;

2)编写主函数测试类中的方法。

学院专业姓名学号。

实验2:利用栈将中缀表达式转换为后缀表达式并进行计算(3学时)

问题描述]

中缀表达式是最普通的一种书写表达式的方式,而后缀表达式不需要用括号来表示,计算机可简化对后缀表达式的计算过程,而该过程又是栈的一个典型应用。

实验目的]

1) 深入理解栈的特性。

2) 掌握栈结构的构造方法。

实验内容及要求]

1) 中缀表达式中只包含+、-运算及( 和 )。

2) 可以输入任意中缀表达式,数据为一位整数。

3) 显示中缀表达式及转换后的后缀表达式(为清楚起见,要求每输出一个数据用逗。

号隔开)。4) 对转换后的后缀表达式进行计算。

例如输入:中缀表达式: 6+3*(9-7)-8/2

输出:转换后的后缀表达式为:6,3,9,7,-,8,2,-

计算结果为:8

学院专业姓名学号。

实验3:行编辑程序问题(3学时)

问题描述]一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的。

较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正。例如,当用户发现刚刚键入的一个字符是错的时,可补进一个退格符"#",以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符"@"以表示当前行中的字符均无效。

如果已经在行首继续输入'#'符号无效。

实验目的]1) 深入理解栈的特性。

2) 掌握使用递归实现某些问题。

3) 设计出应用栈解决在实际问题背景下对较复杂问题的递归算法。

实验内容及要求]

1)实现简单行编辑器,可以输入一个多行的字符序列。但行字符总数(包含退格符和退行符)不大于250。

2)利用顺序栈保存从终端接收的字符, 每行回车时显示经过编辑的本行字符,例如:用户输入为:

vol#idmia##ain(){

chur@char ch;

输出为:void main(){

char ch;

学院专业姓名学号。

实验4:队列的应用(6学时)

问题描述]实现一个简单银行叫号模拟系统。银行有三个窗口可以同时办理业务,当有用户到达银行时,首先选择自己要办理的业务,可以选择一种或多种。系统计算办理此业务所需的时间并显示给用户,然后系统查看有无空闲的窗口,如果有,通知用户到一个空闲窗口办理,如果没有空闲窗口,则需安排用户到某个窗口等候,系统先计算每个队列中用户办理业务的总时间,将用户安排到时间最短的队列等候。

模拟输出多个用户办理业务的过程。输入举例如下:

用户1在时间1到达银行,在1号窗口办理业务,需要1分钟。

用户1在时间2结束,离开。

用户2在时间3达到。在1号窗口开始办理,办理业务需要4分钟

用户3在时间3到达,在2号窗口开始办理,办理业务需要5分钟。

用户4在时间5到达,在3号窗口开始办理,办理需要8分钟。

用户5在时间6到达,在1号窗口等待,办理业需要4分钟。

用户2在时间8办理完业务,离开。

用户5在时间8在1号窗口,办理业需要4分钟。

用户6在时间8到达,在1号窗口等待,办理业务需要6分钟。

用户7在时间8到达,在2号窗口等待,办理业务需要10分钟。

[实验目的]

1)深入理解队列的特性。

2)掌握使用队列实现某些问题。

实验内容及要求]

1.建立3个队列存储在三个窗口等待的用户。

2.建立业务类,描述业务种类,业务所需时间。

3.建立用户类,描述用户办理的业务,用户的状态等。

4.可以随机产生用户进入银行的时间,让用户输入所需办理的业务。

学院专业姓名学号。

实验5: 实现二叉树的基本操作 (12学时)

问题描述]

树和二叉树是最常用的非线性结构(树型结构),其中以二叉树最为常见,本实验题要求实现二叉树的最基本操作,其中遍历二叉树是二叉树各种操作的基础,它分为先序、中序和后序。

实验目的]1) 熟练掌握二叉树的结构特性。

2) 掌握二叉树的各种存储结构的特点及实用范围。

3) 通过二叉树的基本操作的实现,从而思考一般树的基本操作的实现。

4) 熟练掌握各种遍历二叉树的递归和非递归算法。

实验内容及要求]

1)用树表示一个大家族的家谱。家谱树中的结点表示家谱中的成员,包括编号,姓名,性别等信息。家谱树的存储结构为二叉链表。

根为祖先结点,每个结点的左子树是其第一个孩子,右子树是其下一个兄弟。

2)创建家谱树:可以根据前序遍历序列进行创建,也可以以其他方式创建。创建好之后写入文件保存。

3)显示家谱:在屏幕上以树的形式或层次的形式显示家谱。

4)查询:a.输入一个结点值(编号或姓名),输出其双亲及其所有子女,以及所有兄弟结点信息。

b. 输入一个结点值(编号或姓名),查询他是祖先(根节点)的第几代子孙。

5)插入:输入一个结点值(编号姓名),插入一个结点作为其子女。

6)考虑家谱中是否允许有重名的情况。

学院专业姓名学号。

实验6:查找算法(6学时)

问题描述]利用顺序表实现顺序查找、二分查找算法。

实验目的]1、 掌握顺序表的查找。

2、 掌握折半查找算法。

3、 对实际查找问题学会选用一种合适的查找算法求解。

4、比较不同查找算法的效率。

实验内容及要求]

1)将实验1的学生类student中添加一个手机号码属性,在班级类class中增加一个生成通讯录的方法,该方法将全班同学的姓名(假设无重名)和手机号码取出,存入一个顺序结构中,生成通讯录,并写入文件(以后可以直接从文件中读取通讯录)。

2)利用顺序查找算法查找某学生的手机号码。

3)按姓名排序,利用折半查找算法查找某学生的手机号码。

4)统计并比较两种算法中关键字的比较次数。

5)建议定义一个通讯录类,将有关属性和方法进行封装。

学院专业姓名学号。

实验7:哈夫曼树的编/译码器系统的设计(9学时)

问题描述]利用哈夫曼编码进行通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据进行预先编码;在接受端将传来的数据进行解码(复原)。对于可以双向传输的信道,每端都要有一个完整的编/译码系统。

试为这样的信息收发站写一个哈夫曼的编译码系统。

实验目的]

1) 通过哈夫曼树的定义,掌握构造哈夫曼树的意义。

2) 掌握构造哈夫曼树的算法思想。

3) 通过具体构造哈夫曼树,进一步理解构造哈夫曼树编码的意义。

实验内容及要求]

1) 建立哈夫曼树:从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权值(即字符出现的频度)如表1所示,建立哈夫曼树,将它存于文件 hfmtree 中。并将建立好的哈夫曼树以树或凹入法形式输出;对每个字符进行编码并且输出。

2) 编码:利用已建好的哈夫曼编码树 ,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。

(3)译码:输入一串二进制编码,利用你建立的哈夫曼树,将其进行译码,输出字符正文。

数据结构与算法

本章知识要点 算法的基本概念 数据结构的定义 线性表的定义和存储 树 二叉树的定义和存储 查找与排序算法。算法 algorithm 是一组有穷的规则,规定了解决某一特定类型问题的一系列运算,是对解题方 与完整的描述。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中...

算法与数据结构

1 简述算法的概念及其五个重要特性。2 下图是用邻接表存储的图,请画出此图,写出其邻接矩阵以及从c点开始分别按广度优先搜索和深度优先搜索遍历该图的结果。给定一棵用二叉链表表示的二叉树,其根指针为root,编写求此二叉树叶结点个数的算法,要求先写出二叉链表的类型定义。2.编写简单选择排序的算法。1 用...

算法与数据结构

数据结构与算法课程设计。题目 集合运算问题 排序算法比较问题 跳马问题 构造可以使n个城市连接的最小生成树 目录。摘要 4 一 集合运算问题 5 1.采用类语言定义相关的数据类型 5 2.算法设计 5 3.函数的调用关系图 6 4.调试分析 6 5.测试结果 7 6.源程序 带注释 7 二 算法排序...