算法训练1.0:写一个排队系统

简介: 要求的功能

要求的功能:


9d2b2889b1dfe361a8c40f4374f5c2e.png


需求分析:

1.首先看图片分析一下有哪些功能,如下所示:

a.第一个功能,添加学生,输入添加人数;

b.第二个功能,安排就餐;

c.第三个功能,在指定位置之前插入新的客人;

d.第四个功能,删除指定位置的客人信息;

e.第五个功能,查找给定姓名,返回在队伍中的位置;

f.第六个功能,用学号进行排序;

g.第七个功能打印所有客户信息;

h.就是退出功能;

2.除此之外,还要再写两个功能:

i.展示开头和末尾的学生;

j.展示初始页面;

通过输入相应的序号,来达到相应的效果;

3.功能实现:

a.在已存在的线性表,输入学生的姓名和学号;每输入一个学生,长度要加一;

void ListAdd(SqList &L,int n)
{
for(int i=1;i<=n;i++)
{
    People Q;
cout <<"请输入该学生的姓名:"<<endl;
cin >>Q.sn;
cout <<"请输入该学生的卡号:"<<endl;
cin >>Q.si;
        L.stu[L.length]=Q;
        ++L.length;
}
}

b.这个功能简单来说就是删除第一个元素,后面的元素向前移动,或者直接通过遍历覆盖第一个元素;

要注意的是长度要减一;

void ListTop(SqList &L)
{
for(int i=0;i<L.length-1;i++)
{
    L.stu[i]=L.stu[i+1]; 
}
L.length--;
}

c.这个不难,和书上的一样,要注意插入的位置范围与数组的最大长度,如果超过或者不符合范围要注意插入失败;

string ListInsert(SqList &L,int i,People e)
{
if((i<1)||(i>L.length+1)) return "插入失败!输入的范围错误!";
if(L.length==MAXSIZE)  return "插入失败!";
for(int j=L.length-1;j>=i-1;j--)
{
    L.stu[j+1]=L.stu[j];
}
L.stu[i-1]=e;
++L.length;
return "插入成功"; 
}

d.这个功能也不难实现,书上也有,同样要注意删除的位置范围;

string ListDelete(SqList &L,int i)
{
if((i<1)||(i>L.length))  return "删除失败!要删除的学生不在范围内!";
for(int j=i;j<=L.length-1;j++)
{
    L.stu[j-1]=L.stu[j];
}
--L.length;
return "删除成功!";
}

e.这个也不是很难,通过遍历,来查找这个学生是否在数组内;

int LocateList(SqList L,string e)
{
for(int i=0;i<L.length;i++)
{
if(L.stu[i].sn==e)
    {
return i+1;
    }
}
return 0;
}

f.这个功能就是遍历,通过学号的大小,进行排序;

void SortList(SqList &L)
{
int i,j;
for(i=0;i<L.length;i++)
{
for(j=i+1;j<L.length;j++)
    {
if(L.stu[i].si>L.stu[j].si)
        {
            People temp=L.stu[i];
            L.stu[i]=L.stu[j];
            L.stu[j]=temp;
        }
    }
}
}

g.这个就很简单了,单纯的打印输出所有的客户,遍历;

int DaYinList(SqList L)
{
for(int i=0;i<L.length;i++)
{
cout <<L.stu[i].sn <<L.stu[i].si <<endl;
}
}

h.这个功能不需要专门写一个函数,只要在主函数内判断一下就行了

i.这个功能就是输出第一个元素与最后一个元素;

void KaimoList(SqList L)
{
if(L.length>0)
{
cout <<L.stu[0].sn<<L.stu[0].si<<endl;
cout <<L.stu[L.length-1].sn<<L.stu[L.length-1].si<<endl;
}else{
cout <<"现在无人员就餐!"<<endl;
}
}

j.这个功能非常重要,但是不难写;

void ZhanshiList(SqList L)
{
cout <<"队内的人数:"<<L.length <<endl;
KaimoList(L);     
cout <<"------------------------"<<endl;
cout <<"1.新增排队人员信息"      <<endl;
cout <<"2.安排客人就餐"          <<endl;
cout <<"3.指定位置插入客人"      <<endl;
cout <<"4.删除指定的位置"        <<endl;
cout <<"5.查找客人信息"          <<endl;
cout <<"6.按照卡号对信息进行排号"<<endl;
cout <<"7.打印所有信息"          <<endl;
cout <<"8.退出"                  <<endl;
cout <<"请输入您选择的功能序号:"<<"";
}

效果图:


249f59eca439286ef7ae92362ecec01.png


4.逻辑实现(主函数),单个的功能写着简单,逻辑实现要好好想一下,并且自己要好好测试一下,看看有啥BUG没有,这一步非常重要;

int main(void)

{

int n;
SqList L;
InitList(L);    //初始化线性表
ZhanshiList(L); //展示初始页面
cin >>n;       //输入第一次要的功能
while(n>-1&&n<9) //判断n的范围,对应相应的功能
{
if(n==1)
    {
        ListAdd(L,1);
    }else if(n==2)
    {
        ListTop(L);
    }else if(n==3)
    {
int i;
        People e; 
cout<<"请输入你要插的位置:"<<endl;
cin >>i;
cout <<"请输入该学生的姓名:"<<endl; 
cin >>e.sn;
cout <<"请输入学生的卡号:" <<endl;
cin >>e.si; 
cout<<ListInsert(L,i,e)<<endl;
    }else if(n==4)
    {
int i;
cout<<"请输入你要删除的位置:"<<endl;
cin >>i;
cout<<ListDelete(L,i)<<endl;
    }else if(n==5)
    {
string e;
cout <<"请输入你要查找的人:"<<endl;
cin >>e;
int a=LocateList(L,e);
cout <<"这个人排第"<<a<<"位"<<endl;
    }else if(n==6)
    {
        SortList(L);
        DaYinList(L);
    }else if(n==7)
    {
        DaYinList(L);
    }else if(n==8)  //这个就是第八个功能,直接退出循环就行了,就能实现;
    {
break;
    }
    ZhanshiList(L); //每一次都要展示初始页面;
cin >>n;  //再次输入n的值;
}
return 0;

}

目录
相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
143 55
|
21天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
114 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
18天前
|
机器学习/深度学习 缓存 人工智能
【AI系统】QNNPack 算法
QNNPACK是Marat Dukhan开发的量化神经网络计算加速库,专为移动端优化,性能卓越。本文介绍QNNPACK的实现,包括间接卷积算法、内存重排和间接缓冲区等关键技术,有效解决了传统Im2Col+GEMM方法存在的空间消耗大、缓存效率低等问题,显著提升了量化神经网络的计算效率。
32 6
【AI系统】QNNPack 算法
|
18天前
|
存储 人工智能 缓存
【AI系统】Im2Col 算法
Caffe 作为早期的 AI 框架,采用 Im2Col 方法优化卷积计算。Im2Col 将卷积操作转换为矩阵乘法,通过将输入数据重排为连续内存中的矩阵,减少内存访问次数,提高计算效率。该方法首先将输入图像转换为矩阵,然后利用 GEMM 库加速计算,最后将结果转换回原格式。这种方式显著提升了卷积计算的速度,尤其适用于通道数较多的卷积层。
45 5
【AI系统】Im2Col 算法
|
18天前
|
存储 机器学习/深度学习 人工智能
【AI系统】Winograd 算法
本文详细介绍Winograd优化算法,该算法通过增加加法操作来减少乘法操作,从而加速卷积计算。文章首先回顾Im2Col技术和空间组合优化,然后深入讲解Winograd算法原理及其在一维和二维卷积中的应用,最后讨论算法的局限性和实现步骤。Winograd算法在特定卷积参数下表现优异,但其应用范围受限。
30 2
【AI系统】Winograd 算法
|
2天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
34 5
|
8天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
37 3
|
7天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
23天前
|
算法 5G 数据安全/隐私保护
基于MIMO系统的PE-AltMin混合预编码算法matlab性能仿真
本文介绍了基于交替最小化(AltMin)算法的混合预编码技术在MIMO系统中的应用。通过Matlab 2022a仿真,展示了该算法在不同信噪比下的性能表现。核心程序实现了对预编码器和组合器的优化,有效降低了硬件复杂度,同时保持了接近全数字预编码的性能。仿真结果表明,该方法具有良好的鲁棒性和收敛性。
34 8
|
1月前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。