C/C++华北电力大学《数据结构与算法分析》实验任务书[2023-11-02]

C/C++华北电力大学《数据结构与算法分析》实验任务书[2023-11-02]

电子与通信工程系
实验一 表基本操作
一、 实验目的
1、 掌握使用Turbo C或C++上机调试线性表的基本方法;
2、 掌握顺序存储结构上的线性表的基本操作:插入、删除、查找以及合并等运算;
3、 掌握握单链表的基本操作:插入、删除、查找等运算;
4、 理解掌握使用结构体来表述复杂信息的方法及其基本操作。
二、 实验要求
1、 认真阅读和掌握本实验的给定的程序;
2、 按照你的操作需要,编制程序、上机调试运行程序;
3、 保存程序的运行结果,并结合程序进行分析。
注意事项
在磁盘上创建一个目录,专门用于存储数据结构实验的程序。
三、 实验内容
源码联系UP主 -> https://space.bilibili.com/329101171
1、利用顺序表完成线性表信息的管理。要求首先建立并初始化线性表,并实现增加、删除、查找、修改和遍历表等功能。
2、利用单链表完成一个班级的所有学生信息的管理:能够增加、删除、查找、修改学生的记录。基本要求如下

  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;
    }
}

源码联系UP主 -> https://space.bilibili.com/329101171

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值