【数据结构】(五)(循环)队列,链式队列(银行排队(离散事件模拟)算法)

【数据结构】(五)队列,链式队列(银行排队算法)

(一)队列:(如果用循环将使算法时间变得复杂,所以为了提高运算效率,引入队列
在这里插入图片描述
(1)假溢出:(为了解决假溢出,引入循环队列
在这里插入图片描述
(2)循环队列:(判断空满条件
在这里插入图片描述
其中方法二:
在这里插入图片描述

(3)队列的创建:(所有的引用修改都是为了可以传出去而使用的)
C++:
在这里插入图片描述
C语言:
在这里插入图片描述
(4)操作:
入队:
在这里插入图片描述
出队:
在这里插入图片描述
在主函数中输出item:
在这里插入图片描述
改为C++中语句:
在这里插入图片描述
读取对头元素:
在这里插入图片描述
(二)链式队列:
C++:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)区别:
在这里插入图片描述
(三)银行排队(离散事件模拟)问题:
在这里插入图片描述
表示:
如16,19,23都表示客户所用时间;
例如:16 2 -->表示在第二个窗口花了16分钟,对应5 11(排队5分钟,业务11分钟)
在这里插入图片描述
算法:(先图解,最后会有对应代码块)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还需要一个链表来存储和处理事件:
在这里插入图片描述
在这里插入图片描述
操作:cpp
在这里插入图片描述
在这里插入图片描述
代码:
List.h文件

#pragma once
#include <iostream>
using namespace std;
#include <string>


//*************----《链表初始化定义》----***********//

typedef struct evNode
{
   
	int occurtime;   //事件发生时间
	int nType;       //事件类型:-1表示到达,0~3表示四个窗口
	struct evNode* next;
}evNode;

class EventList
{
   
private:
	evNode* head;   //头指针
	int length;
public:
	EventList()   //构造函数
	{
   
		head = new evNode;
		head->next = NULL;
		length = 0;
	}
	~EventList()  //析构函数,删除节点,清空
	{
   
		//释放再堆区开辟的所有节点
		//保存释放的下一个节点
		while (head->next)
		{
   
			evNode* p = head->next->next;
			delete(head->next);
			head->next = p;
		}
		length = 0;
	}
	bool isEmpty()  //判断是否为空
	{
   
		if (length == 0)
		{
   
			return true;
		}
		else
		{
   
			return false;
		}
	}
	void addNode(EventList List, evNode* eventItem)   //向链表插入数据
	{
   
		//插入是要按离开或者到达的时间顺序进行插入
		evNode* p = new evNode;
		p = eventItem;
		//对链表进行遍历,找到新用户该插入的位置
		evNode* qi, * 
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值