[数据结构-严蔚敏版]P65离散事件模拟(银行客户的离散事件驱动模拟程序)

在这里插入图片描述

在这里插入图片描述

写这个简单玩意,居然花费了我6小时+,唉!!!,还是太菜了!
中间已经起了放弃的念头了,最后还是坚持下来了!

总结:
(1)漏了p = p->next
在这里插入图片描述
(2)队列删除元素的时候,删除的是最后一个忘记特判。

在这里插入图片描述
(3)写的时候太急了,忘记给pn赋值,导致一执行这个函数,我的表就断了。而且要注意判断删除的元素不存在怎么办(!e->next)

在这里插入图片描述
(4)这些特判最好写写,增强代码的健壮性。而且不写可能会报错。

在这里插入图片描述

在这里插入图片描述

代码如下:

#include<iostream>
#include <cstdlib>
#include <ctime>
using namespace std;typedef struct
{int occurTime;int nType;
}Event, ElemType;typedef struct
{int arrivalTime;int duration;
}QElemType;typedef struct QNode
{QElemType data;QNode *next;
};typedef struct
{QNode *front, *rear;int length;
}Queue;typedef struct ENode
{Event data;ENode *next;
}ENode, *EventList, *Enode;int totalTime = 0;
int customerNUM = 0;bool initList(EventList &eL)
{eL = new ENode;if (!eL) return false;eL->next = nullptr;return true;
}bool initQueue(Queue &q)
{q.front = q.rear = new QNode;if (!q.front) return false;q.front->next = nullptr;q.length = 0;return true;
}int cmp(Event a, Event b) {if (a.occurTime < b.occurTime) return -1;else if (a.occurTime == b.occurTime) return 0;else if (a.occurTime > b.occurTime) return 1;
}bool orderInsert(EventList &el, Event e, int(*compare)(Event, Event))
{ENode *p = el;if (!p->next){//插入的元素为第一个元素的情况ENode *s = new ENode;if (!s) return false;s->data = e;s->next = p->next;p->next = s;return true;}p = p->next;while (p){if (compare(p->data, e) <= 0){ENode *s = new ENode;if (!s) return false;s->data = e;s->next = p->next;p->next = s;return true;}}return true;
}bool listEmpty(EventList el)
{ENode *p = el->next;if (!p) return true;return false;
}Event getCurElem(ENode *e)
{if (e)return e->data;
}bool enQueue(Queue &q, QElemType e)
{QNode *s = new QNode;if (!s) return false;s->data = e;s->next = nullptr;q.rear->next = s;q.rear = s;q.length++;return true;
}bool delQueue(Queue &q, QElemType &e)
{if (q.front == q.rear) return false;QNode *p = q.front->next;e = p->data;q.front->next = p->next;if (p == q.rear) q.rear = q.front;delete p;q.length--;return true;
}int minimumQueue(Queue q[])
{int j = 0;int maxNum = 999999;for (int i = 1; i <= 4; i++){int len = q[i].length;if (len < maxNum){j = i;maxNum = len;}}return j;
}int queueLength(Queue q)
{return q.length;
}bool queueEmpty(Queue q)
{if (q.front == q.rear) return true;return false;
}bool getHead(Queue q, QElemType &customer)
{if (!q.front->next) return false;customer = q.front->next->data;return true;
}void Random(int &a, int &b)
{b = 1 + rand() % 10;a = b + 2;cout << a << " " << b << endl;
}ENode* getHead(EventList &ev)
{return ev;
}bool delFirst(Enode &e, Enode &pn)
{if (!e->next) return false;pn = e->next;e->next = pn->next;pn->next = nullptr;return true;
}void openForDay(EventList &ev, Queue q[])
{totalTime = 0;customerNUM = 0;initList(ev);Event en;en.occurTime = 0;en.nType = 0;orderInsert(ev, en, cmp);for (int i = 1; i <= 4; i++){initQueue(q[i]);}
}void printEvent(EventList el);void customerArrived(EventList &ev, Queue q[], Event en, int closeTime)
{++customerNUM;int durtime = 0;int intertime = 0;Random(durtime, intertime);int i = 0;int t = en.occurTime + intertime;if (t < closeTime){orderInsert(ev, { t,0 }, cmp);}i = minimumQueue(q);enQueue(q[i], { en.occurTime,durtime });if (queueLength(q[i]) == 1){orderInsert(ev, { en.occurTime + durtime,i }, cmp);}
}void customerDeparture(EventList &ev, Queue q[], Event en)
{int i = en.nType;QElemType customer;delQueue(q[i], customer);cout << "duration time  = " << en.occurTime - customer.arrivalTime << endl;totalTime += en.occurTime - customer.arrivalTime;if (!queueEmpty(q[i])){getHead(q[i], customer);orderInsert(ev, { en.occurTime + customer.duration,i }, cmp);}}void printEvent(EventList el)
{ENode *p = el->next;while (p){cout << "event occurtime = " << p->data.occurTime << " " << "ntype = " << p->data.nType << " " << endl;p = p->next;}
}void printQueue(Queue q)
{QNode *p = q.front->next;while (p){cout << "queue arrivaltime = " << p->data.arrivalTime << " " << "queue duration = " << p->data.duration << endl;p = p->next;}
}void bank_Simulation(EventList &ev, Queue q[], int closeTime)
{openForDay(ev, q);ENode *p = nullptr;Event en;while (!listEmpty(ev)){delFirst(ev, p);en = getCurElem(p);if (en.nType == 0){customerArrived(ev, q, en, closeTime);}else{customerDeparture(ev, q, en);}}cout << "The average time is " << 1.0*totalTime / customerNUM << endl;
}int main()
{EventList ev;Queue q[5];srand((unsigned)time(NULL));bank_Simulation(ev, q, 24);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[温故知新] 编程原则和模式

写了这么多年代码&#xff0c;依旧做不好一个项目做好一个项目是人力、产品、业务、技术、运营的结合&#xff0c;可能还叠加一点时机的因素&#xff0c;就我们码农而言&#xff0c;工作就是搬砖&#xff0c;实现产品&#xff0c; 给业务提供支撑。“给祖传代码加 BUG 修 BUG”…

IntelliJ IDEA中快捷键大全+出现的问题

参照 文章目录1.Ctrl2.Alt3.Shift4.Ctrl Alt5.Ctrl Shift6.Alt Shift7.Ctrl Shift Alt8.其他idea如何将设置包名展开当出现右键&#xff0c;没有创建包选项时idea没有maven图标安装mysql和idea配置idea查看代码的最近修改人及时间1.Ctrl 快捷键介绍Ctrl F在当前文件进行…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

[数据结构-严蔚敏版]P95矩阵压缩-特殊矩阵的存储(对称矩阵,三角矩阵)

对称矩阵的存储&#xff1a; 代码如下: #include <iostream> using namespace std;int main() {int n;cin >> n;int *a;a new int[(n*(n 1)) / 2];for (int i 0; i < (n*(n 1)) / 2; i){cin >> a[i];}for (int i 1; i < n; i){for (int j 1; j…

微前端与项目实施方案研究

一、前言微前端(micro-frontends)是近几年在前端领域出现的一个新概念&#xff0c;主要内容是将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的小块&#xff0c;而在用户看来仍然是内聚的单个产品。微前端的理念源于微服务&#xff0c;是将庞大的整体拆成可控的小…

ASP.NET Core分布式项目实战(集成ASP.NETCore Identity)--学习笔记

任务24&#xff1a;集成ASP.NETCore Identity之前在 Index 页面写了一个 strong 标签&#xff0c;需要加个判断再显示&#xff0c;不然为空没有错误的时候也会显示if (!ViewContext.ModelState.IsValid) {<strong>Error""</strong><div asp-validatio…

Java中关于省略作用域报错问题分析

这个是很典型的作用域问题&#xff0c;if后如果省略那么if只作用于其后面的第一行代码 这时候如果这行代码只是个变量声明语句的话&#xff0c;这个变量是没有其他任何逻辑可以访问到的&#xff0c;因为作用域问题(如果有/&#xff0c;那么声明语句中声明的变量只在这个个内可用…

C#9就这么来了,.NET开发者该做点什么?

就在上周三10号&#xff0c;.NET5.0发布了第5个预览版&#xff0c;同时支持了C#9-preview&#xff01;是的&#xff0c;你没看错&#xff0c;虽然C# 8.0还未正式发布&#xff0c;但是通往C&#xff03;9的漫长道路却已经开始&#xff0c;这发展速度简直了&#xff01;C#语言的快…

Magicodes.IE在.NET Core中通过请求头导出多种格式文件

原文作者&#xff1a;HueiFeng前言在2.2里程碑中我们增加了一些新的功能,正如标题所写通过请求头进行导出我们不同格式的文件.下面我们来看一下如何使用.通过这种方式无论是对我们的数据多用途&#xff0c;还是说对我们的数据校验都做到了轻松易配。同时我们也将在本周发布2.3版…

使用DQL查询数据

文章目录DQL语言SELECT语法制定查询字段AS 子句作为别名DISTINCT关键字的使用使用表达式的列where条件语句逻辑操作符模糊查询 &#xff1a; 比较操作符连接查询JION自连接排序和分页子查询DQL语言 DQL( Data Query Language 数据查询语言 ) 查询数据库数据 , 如SELECT语句简…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

SilkierQuartz 1.0.21 发布, 是一个 Quartz.NET 的强大且简单的Web管理工具和承载组件...

SilkierQuartz 是一个新的合并了 Quartzmin 和 QuartzHostedService的组件!Quartz.NET 是一个完整的开源的任务规划系统&#xff0c;从小应用至大型企业级应用都可以适用.Quartzmin Quartzmin 是一个 Quartz.NET 的强大且简单的Web管理工具QuartzHostedService QuartzHostedSer…

用C#在STM32上写第一个Hello world

随着微软放弃.Net MF ,通过C#编写STM32 平台上的程序变得渺茫&#xff0c; 但是&#xff0c; 别着急&#xff0c; 目前至少有两个社区在做这件事情&#xff0c; 传承了微软的.Net MF , 一家是 nanoframework,另外一家比较封闭的是 GHI Electronics 地址是: https://github.com/…

如何找到Eclipse左侧项目栏

如何找到Eclipse左侧项目栏 window --> Show View --> other --> Java–> package Explorer

深入async/await知多少

.net的async/await功能相信对很多人来说并不陌生了&#xff0c;有人感觉这功能很好&#xff0c;但也有人说这功能不好容易产生一些莫名其妙的死锁&#xff1b;有人说这些异步功能也有人说这是同步功能。其实在使用async/await的有多少人真的了解它们呢&#xff1f;接下来详细地…

微软正式发布 gRPC-Web for .NET

今年一月份的时候&#xff0c;微软曾宣布对 gRPC-Web for .NET 的实验性支持微软实验性地对 .NET 支持 gRPC-Web&#xff0c;现在它已正式发布。gRPC 是谷歌开源的高性能、通用 RPC 框架&#xff0c;支持包括 .NET 在内的多种编程语言。它面向移动和基于 HTTP/2 标准设计&#…

Java多线程(review)

文章目录线程状态线程方法线程停止线程休眠——sleep网络延时模拟倒计时与打印当前系统时间线程礼让——yield线程强制执行——Join线程状态线程优先级守护线程不安全案例死锁Lock锁线程状态 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后&#xff0c;该线…

利用Azure Functions和k8s构建Serverless计算平台

题记&#xff1a;昨晚在一个技术社区直播分享了“利用Azure Functions和k8s构建Serverless计算平台”这一话题。整个分享分为4个部分&#xff1a;Serverless概念的介绍、Azure Functions的简单介绍、k8s和KEDA的介绍和最后的演示。ServerlessServerless其实包含了两种概念&…

基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

对 JsonConvert 的认识太肤浅了,终于还是遇到了问题

一&#xff1a;背景1. 讲故事在开始本文之前&#xff0c;真的好想做个问卷调查&#xff0c;到底有多少人和我一样&#xff0c;对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬&#xff3f;┬), 这样我也好结伴同行&#xff0c;不再孤单落…