|
|
|
@ -110,24 +110,68 @@ ADT Queue{
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 2.2 数据结构设计
|
|
|
|
|
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
|
运用链队列、链表的数据结构,使银行业务的模拟更加高效的完成。链表和链队列的结构,更加形象的体现了客户的在银行的排队、业务办理、离开的流程。
|
|
|
|
|
|
|
|
|
|
### (1)链表结构
|
|
|
|
|
Status InitList(LinkList& L);//链表初始化
|
|
|
|
|
Status ListInsert(LinkList& L,int i,ElemType e);//在第i个位置前即i-1的位置上插入元素e
|
|
|
|
|
Status ListEmpty(LinkList L);//判断链表是否为空
|
|
|
|
|
Status DelFirst(LinkList L,LNode*& q);//删除链表中第一个结点并以q返回
|
|
|
|
|
LNode* GetHead(LinkList L);//返回链表头结点
|
|
|
|
|
ElemType GetCurElem(LNode* p);//返回p所指结点元素的值
|
|
|
|
|
void PrintEventList();//打印事件链表
|
|
|
|
|
Status ListTraverse(LinkList& L);//遍历链表
|
|
|
|
|
### (2)链队列结构
|
|
|
|
|
Status InitQueue(LinkQueue& Q);//链队列的初始化
|
|
|
|
|
Status EnQueue(LinkQueue& Q,QElemType e);//入队列
|
|
|
|
|
Status DeQueue(LinkQueue& Q,QElemType& e);//出队列
|
|
|
|
|
int QueueLength(LinkQueue Q);//返回队列长度
|
|
|
|
|
Status GetHead(LinkQueue Q,QElemType& e)//返回队头元素
|
|
|
|
|
注:由于参数个数会发生变化,函数会发生重载
|
|
|
|
|
Status QueueEmpty(LinkQueue Q);//判断队列是否为空
|
|
|
|
|
void PrintQueue();//打印队列
|
|
|
|
|
Status QueueTraverse(LinkQueue Q);//遍历队列
|
|
|
|
|
|
|
|
|
|
### (1)xxx结构
|
|
|
|
|
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。
|
|
|
|
|
|
|
|
|
|
### (2)xxx结构
|
|
|
|
|
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。
|
|
|
|
|
## 2.3 算法设计
|
|
|
|
|
主要运用排序、链表、队列、判断最短队列、比较事件先后等算法完成银行业务的模拟,体现了整个业务的可行性、完整性、简洁性、高效性。
|
|
|
|
|
### (1)链表判空算法
|
|
|
|
|
|
|
|
|
|
````
|
|
|
|
|
判断链表是否为空
|
|
|
|
|
If链表为空
|
|
|
|
|
返回FALSE
|
|
|
|
|
ELSE
|
|
|
|
|
返回TRUE
|
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
### (2)银行业务模拟算法
|
|
|
|
|
````
|
|
|
|
|
引入OpenForDay函数
|
|
|
|
|
WHILE链表非空
|
|
|
|
|
引入DelFrist函数、GetCurElem函数、GetHead函数、CustomerArrived函数、CustomerDepature函数等计算客户平均逗留时间
|
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
## 2.3 算法设计
|
|
|
|
|
首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
|
### (3)比较事件先后算法
|
|
|
|
|
````
|
|
|
|
|
IF a事件时间>b事件时间
|
|
|
|
|
返回 1
|
|
|
|
|
IF a事件时间=b事件时间
|
|
|
|
|
返回 0
|
|
|
|
|
IF a事件时间< b事件时间
|
|
|
|
|
返回-1
|
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
### (4)求最短队列算法
|
|
|
|
|
````
|
|
|
|
|
初始化最短队列为Q[1]
|
|
|
|
|
FOR 从Q[2]开始循环
|
|
|
|
|
IF 最短长度>Q[j]
|
|
|
|
|
最短长度=Q[j]
|
|
|
|
|
返回队列j
|
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
### (1)XXX算法
|
|
|
|
|
给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。
|
|
|
|
|
|
|
|
|
|
### (2)XXX算法
|
|
|
|
|
给出核心算法的设计,包括伪代码或流程图。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|