- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列_rhy
3.1 栈 二、栈的图示 三、栈的基本操作 3.1.2 栈的存储和实现 3.2 栈的应用举例 3.3 栈与递归 例 n=3 时圆盘移动的过程如下图所示: 3.4 队 列 (5) 取队头元素操作 GetHead(Q,e) 功能:取队头元素,并用 e 返回; (6) 入队操作 EnQueue( Q, e ) 功能:将元素 e 插入 Q 的队尾; (7)出队操作 DeQueue( Q, e) 功能:若队列不空,则删除 Q 的队头元素,用 e 返回其值,并返回OK,否则返回ERROR; 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 四、循环队列基本操作的实现 3.5 离散事件模拟 问 题 银行业务模拟 并统计一天内客户在银行逗留的平均时间。 银行业务算法描述 1 初始化工作 2 循环 while ( 还有客户业务) (1) 取当前要处理的事件 (有序链表首元素) (2) 按事件类型做相应处理 (或是客户到达事件或是客户离开事件) 3 计算客户平均逗留时间 银行业务的数据结构 1 事件的有序链表 --按事件发生的时间排序 2 链队列(若干个) --对应银行业务的排队窗口 数据元素(结点)类型定义 1 有序链表的数据元素(结点)类型--P66 typedef struct Event { int OccurTime; // 事件发生的时间 int NType; // 事件类型:0-到达1~4-离开 struct Event *next } ElemType,*LinkList; // 事件类型,有序链表的结点类型 有序链表结点的结构示意 数据元素(结点)类型定义 2 队列的数据元素(结点)类型--P66 typedef struct QElemType { int ArrivalTime; // 客户到达时间 int Duration; // 客户逗留时间 struct QElemType *next } QElemType,*QPtr; 注: 参见P61定义链队列 队列结点的结构示意 CustomerArrived( )-到达事件处理 1 计数 2 随机产生该客户的逗留时间及下一个客户的到达时间 3 若非关门时间,将下一个客户的到达事件插入事件链表(按时间由小到大,有序插入) 4 求长度最短的队列(同样长度,按队列序号确定排队队列) 5 该客户入队。若是队首元素,生成一个该客户的离开事件,按序插入事件链表。 CustomerDeparture( )-离开事件处理 1 取将出队的队列号(窗口号) 2 从该队中删除该客户 3 累计客户的逗留时间 4 若该队列不空,设置队首元素的离开事件,并按序插入事件链表。 相 关 信 息 列 表 指针域 next 客户逗留时间 客户到达时间 Duration ArrivalTime (1)初始化队操作:InitQueue ( LinkQueue Q ) Status InitQueue( LinkQueue Q ) { // 建一个空队列Q --P.62 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); // 为链队列的头结点分配空间 if (!Q.front) exit(OVERFLOW); Q.front-next=NULL; return OK;} 三、 链队列基本操作的算法 Q.front Q.rear ∧ 空链队列 销毁队操作: DestroyQueue( LinkQueue Q ) Status DestroyQueue( LinkQueue Q ) { // 销毁队列Q -- P.62if (!Q.front) return ERROR; // 链队列不存在 while(Q.fron
文档评论(0)