[数据结构-严蔚敏版]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”…

[C语言] va_start和va_end详解

在C中&#xff0c;当无法列出传递函数的所有实参的类型和数目时&#xff0c;可以用省略号指定参数表。例如&#xff1a; void foo(...); void foo(parm_list,...);函数参数的传递原理 函数参数是以栈的形式存取&#xff0c;从右至左入栈。 参数的内存存放格式&#xff1a;参数…

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…

Java Properties 类

Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。 Properties 类被许多 Java 类使用。例如&#xff0c;在获取环境变量时它就作为 System.getProperties() 方法的返回值。 Properties 定义如下实例变量.这个变量持有一个 Prop…

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

一、前言微前端(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…

[数据结构]链表中销毁和清空的区别

链表是一个很基本的数据结构&#xff0c;其他的数据结构&#xff08;如&#xff1a;栈、队列、二叉树等&#xff09;都可以用链表来实现。 销毁&#xff1a;是先销毁了链表的头&#xff0c;然后接着一个一个的把后面的销毁了&#xff0c;这样这个链表就不能再使用了&#xff0…

java——泛型

文章目录Java 泛型泛型方法实例有界的类型参数:实例泛型类实例类型通配符1、类型通配符一般是使用?代替具体的类型参数。例如 List<?> 在逻辑上是List,List 等所有List<具体类型实参>的父类。实例2、类型通配符上限通过形如List来定义&#xff0c;如此定义就是通…

Dotnet core基于ML.net的销售数据预测实践

ML.net已经进到了1.5版本。作为Microsoft官方的机器学习模型&#xff0c;你不打算用用&#xff1f;一、前言ML.net可以让我们很容易地在各种应用场景中将机器学习加入到应用程序中。这是这个框架很重要的一点。通过ML.net&#xff0c;我们可以使用手中的可用数据&#xff0c;进…

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

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

java进阶之注解篇

文章目录注解基本语法定义注解元注解编写注解处理器注解元素默认值限制生成外部文件替代方案注解不支持继承实现处理器注解 注解&#xff08;也被称为元数据&#xff09;为我们在代码中添加信息提供了一种形式化的方式&#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#语言的快…

C++,Java编程空指针的一个小细节

//判断是否击中了敌人坦克if (hero.shot!null && hero.shot.isLive ){for (int i 0;i<enemyTanks.size();i){EnemyTank enemyTank enemyTanks.get(i);hitTank(hero.shot,enemyTank);}}上面代码的if条件不能写成这样&#xff1a; if ( hero.shot.isLive &&am…

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异常处理和…

关于-32768补码的问题

首先要知道的是计算机中补码的表示是唯一且连续的&#xff01;我想这是计算机为什么不用原码来表示的一个原因&#xff01;另外&#xff0c;以补码形式来运算的话&#xff0c;设计的逻辑电路会简单很多&#xff0c;会少很多逻辑运算器件&#xff0c;所以计算机采用补码的形式来…

TCP(发消息:简易代码实现)

文章目录客户端服务器review&#xff1a;查询IP和端口发送文件客户端 链接服务器Socket发送消息 package com.ayv.try02;import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;//客户端 public class TcoClientDe…