数据结构学习笔记 --- 队列的应用举例(离散事件模拟)

本文介绍了如何使用队列进行离散事件模拟,并通过银行业务模拟进行具体阐述,展示了队列在处理并发请求和任务调度中的作用。
摘要由CSDN通过智能技术生成

1. 引言 


本文主要讲解一个队列和线性表的例子——离散事件模拟。


2. 离散事件模拟——银行业务模拟

#include "ds.h"


#define FILE_TEST

// 银行业务模拟
#define 	Qu 		4			// 客户队列数
#define 	Khjg	5			// 两相邻到达的客户的时间间隔最大值
#define 	Blsj 	30			// 每个客户办理业务的时间最大值

typedef struct
{
	int 	OccurTime; 		// 事件发生的时间
	int 	NType; 			// 事件类型, Qu表示到达事件,0至Qu-1表示Qu个窗口的离开事件
}Event, ElemType; 			// 事件类型,有序链表LinkList的数据元素类型

typedef struct LNode
{
	ElemType 	data;
	LNode		*next;
}LNode, *Link, *Position;;

typedef struct
{
	Link 	head, tail;
	int 	len;
}LinkList;

typedef 	LinkList 	EventList; //事件链表指针类型,定义为有序链表

typedef 	struct
{
	int 	ArrivalTime;		// 到达时间
	int 	Duration;			// 办理事件
}QElemType;						// 定义队列的数据元素类型

// 单链队列--队列的链式存储结构
typedef struct QNode
{
	QElemType 	data;
	QNode 		*next;
}*QueuePtr;

typedef struct
{
	QueuePtr 	front, rear;	// 队头、队尾指针
}LinkQueue;


// 程序中用到得主要变量(全局)
EventList 	ev; 						// 事件表头指针
Event 		en, et;						// 事件, 临时变量

#ifdef FILE_TEST
FILE 		*fp;						// 文件类型指针,用于指向b.txt, a,txt
#endif

long int 	TotalTime = 0; 				// 累计客户逗留时间(初值为0)
int 		CloseTime, CustomerNum = 0; // 银行营业时间(单位为分),客户数(初值为0)

void MakeNode(Link &p, ElemType e);
void FreeNode(Link &p);
void InitList(LinkList &L);
void ClearList(LinkList &L);
void DestroyList(LinkList &L);
// h指向L的一个结点,把h当做头结点,将s所指结点插入在第一个结点之前, 形参增加L,因为需修改L
void InsFirst(LinkList &L,Link h,Link s);
// h指向L的一个结点,把h当做头结点,删除链表中的第一个结点并以q返回。
// 若链表为空(h指向尾结点),q=NULL,返回FALSE
Status DelFirst(LinkList &L, Link h, Link &q);

// 将指针s(s->data为第一个数据元素)所指(彼此以指针相链,以NULL结尾)的
// 一串结点链接在线性链表L的最后一个结点之后,并改变链表L的尾指针指向新的尾结点
void Append(LinkList
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值