C/C++华北电力大学《数据结构与算法分析》实验任务书[2023-11-02]
电子与通信工程系
实验一 表基本操作
一、 实验目的
1、 掌握使用Turbo C或C++上机调试线性表的基本方法;
2、 掌握顺序存储结构上的线性表的基本操作:插入、删除、查找以及合并等运算;
3、 掌握握单链表的基本操作:插入、删除、查找等运算;
4、 理解掌握使用结构体来表述复杂信息的方法及其基本操作。
二、 实验要求
1、 认真阅读和掌握本实验的给定的程序;
2、 按照你的操作需要,编制程序、上机调试运行程序;
3、 保存程序的运行结果,并结合程序进行分析。
注意事项
在磁盘上创建一个目录,专门用于存储数据结构实验的程序。
三、 实验内容
源码联系UP主 -> https://space.bilibili.com/329101171
1、利用顺序表完成线性表信息的管理。要求首先建立并初始化线性表,并实现增加、删除、查找、修改和遍历表等功能。
2、利用单链表完成一个班级的所有学生信息的管理:能够增加、删除、查找、修改学生的记录。基本要求如下
- 学生信息内容包括:姓名、性别、年龄、成绩;
- 节点结构:定义一个结构类型,用来存放学生信息。
struct STU
{
char name[20];
char sex;
int age;
int score;
};
部分参考程序如下:
1、线性表的插入:在第i(1£i £ n+1)个元素之前插入一个新的数据元素x
int insalist(int i, int x, int v[], int *p)
{
int j, n;
n = *p;
if ((i < 1) || (i > n + 1))
return (0);
else
{
for (j = n; j >= i; j--)
v[j] = v[j - 1];
v[j] = x;
*p = ++n;
return (1);
}
}
2、线性表的的删除:从线性表中删除第i i(1£i £ n)个位置的元素}
int delalist(int i, int v[], int *p)
{
int j, n;
n = *p;
if ((i < 1) || (i > n))
return (0);
else
{
for (j = i; j < n; j++)
v[j - 1] = v[j];
*p = --n;
return (1);
}
}
实验二 自选商店收费窗口模拟
一、 实验目的
1. 训练学生根据实际问题的需要,选择恰当的数据结构,设计出合理的处理算法,并实现整个程序;
2. 进一步掌握掌握线性表的基本操作:插入、删除、查找并等运算;
3. 掌握队列的特点(先进先出的原则)及其基本运算方法。
二、 实验要求
1. 认真查阅有关资料,选择恰当的数据结构,设计出合理的处理算法
2. 编写本实验的程序;
3. 上机调试、运行程序;
4. 保存程序的运行结果,并结合程序进行分析统计。
三、 实验内容
编制程序,在给定客流量以及通过收费窗口服务时间的条件下(具体如下),模拟在给定时间段的客户付费等待情况,并对分析结果进行统计和分析;根据分析结果调整服务窗口的数量,再次模拟和分析,为提高服务质量、降低经营成本提供建议。
- 商店通过收费窗口客流,一人/30±5秒,并且等概率出现;
- 收费服务时间,30±10秒,60±10秒,90±10秒,120±10秒,并且等概率出现;
- 对于刚要通过收费的客户,如果某个窗口是空闲的,则可上前办理业务,若所有窗口都有客户,则排到人数最少的队伍后面;
- 模拟窗口服务时间2小时(9:00-11:00);
- 如果客户到达时间加上所需服务时间超过下班时间,该客户不加入队列;
- 客户一旦入队,不能中途退出或更换队列。
分析统计内容:
1. 客户平均服务时间(包括等待和服务时间);
2. 客户最大和最小服务时间;
3. 没有得到服务的客户数量;
4. 各个窗口服务人数。
实验三Huffman编/译码树
一. 实验目的
1. 进一步理解掌握指针变量的含义;
2. 掌握二叉树的结构特征,以及各种存储结构的特点及使用范围;
3. 掌握有Huffman编码基本原理;
4. 掌握Huffman编码树的建立以及利用它进行编码/反编码的方法。
二. 实验要求
1. 认真阅读和掌握本实验的要求;
2. 阅读理解参考程序,根据需求重新改写、完善程序并运行,打印出文件清单和运行结果;
3. 保存和打印出程序的运行结果,并结合程序进行分析。
三. 实验内容
利用Huffman进行通信可以提高信道利用率、缩短传输时间。要求为使用Huffman编码的通信系统实现信息收发编写程序,以顺序存储结构方式存储二叉树,实现Huffman编译码。
参考程序如下:
- 一棵有n个叶子结点的Huffman树有2n-1个结点
- 采用顺序存储结构:一维结构数组
结点类型定义
typedef struct
{
int data;
int pa, lc, rc;
} JD;
Huffman算法实现
void huffman(int n, int w[], JD t[])
{
int i, j, k, x1, x2, m1, m2;
for (i = 1; i < (2 * n); i++)
{
t[i].pa = t[i].lc = t[i].rc = 0;
if (i <= n)
t[i].data = w[i];
else
t[i].data = 0;
}
for (i = 1; i < n; i++)
{
m1 = m2 = MAX;
x1 = x2 = 0;
for (j = 1; j < (n + i); j++)
{
if ((t[j].data < m1) && (t[j].pa == 0))
{
m2 = m1;
x2 = x1;
m1 = t[j].data;
x1 = j;
}
else if ((t[j].data < m2) && (t[j].pa == 0))
{
m2 = t[j].data;
x2 = j;
}
}
k = n + i;
t[x1].pa = t[x2].pa = k;
t[k].data = m1 + m2;
t[k].lc = x1;
t[k].rc = x2;
}
}