数据结构简单模拟银行排队系统 |
您所在的位置:网站首页 › 爱尔兰拒绝系统 › 数据结构简单模拟银行排队系统 |
数据结构 队列
银行排队系统实现
功能要求: (1) 客户进入排队系统; (2) 客户离开; (3) 查询当前客户前面还有几人; (4) 查询截至目前总共办理多少客户。 输出要求:每进行一次操作后,输出当前排队成员情况。 算法实现 首先创建一个空队列即银行排队队列,再向其中执行插入,删除,查询等操作。在执行插入操作时要判断队列是否已达最大长度,否则不能插入。在删除时要判断队列是否为空,否则不能执行删除操作。删除以后若队列为空,则需要将队尾指向对头。 #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 //define the structure node int m = 0; typedef int Status; typedef int QElemType; typedef struct queue//结点结构 { int value; struct queue* next; }Queue, *QueuePtr; typedef struct linkqueue { Queue *front;//头指针 Queue *tail;//尾指针 }LinkQueue; #define QUEUE_LEN sizeof(Queue) int initQueue(LinkQueue*);//创建一个队列 int EmptyQueue(LinkQueue*);//判断队列是否为控 int enterQueue(LinkQueue*, int value);//插入元素value为Q的新的队尾元素 int deQueue(LinkQueue*);//删除元素 int printQueue(LinkQueue*);//输出队列 int Query(LinkQueue*, int);//查询元素myNum在队列中的位置 #include #include int initQueue(LinkQueue* Q)//构造一个空队列Q { printf("Init a queue ......\n"); if (!(Q->front = Q->tail = (Queue*)malloc(QUEUE_LEN))) { printf("ERROR:Malloc Error !\n"); return ERROR; } Q->front->next = NULL; return OK; } int enterQueue(LinkQueue* Q, int enterValue)//插入元素enterValue为Q的新的队尾元素 { Queue* tmpNode = NULL; if (!(tmpNode = (Queue*)malloc(QUEUE_LEN))) { printf("ERROR:Malloc Error !\n"); return ERROR; } tmpNode->value = enterValue; tmpNode->next = NULL; Q->tail->next = tmpNode; Q->tail = tmpNode; } int EmptyQueue(LinkQueue *Q) //若队列Q为空,返回TRUE,否则返回FALSE { if (Q->front==Q->tail) return TRUE; else return FALSE; } int printQueue(LinkQueue* Q)//将队列中每个元素输出 { Queue* tmpNode = NULL; tmpNode = Q->front->next; if (NULL == tmpNode) { printf("无人排队\n"); return ERROR; } while (tmpNode != Q->tail) { printf("%d ", tmpNode->value); tmpNode = tmpNode->next; } printf("%d\n", Q->tail->value); } int deQueue(LinkQueue*Q, QElemType *e)//若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR { QueuePtr p; if (EmptyQueue(Q)) { printf("无人离开\n"); return ERROR; } p = Q->front->next; *e = p->value; Q->front->next = p->next; m++; if (Q->tail == p)//如果队列中只有一个元素 Q->tail = Q->front;//此时应当让队尾指针指向队头,否则可能将队尾指针释放掉 free(p); return OK; } int Query(LinkQueue* Q, int myNum)//查询元素myNum在队列中的位置 { int numOfMan = 0; if (EmptyQueue(Q)) { printf("无人排队\n"); return ERROR; } else if (myNum==Q->front->value==Q->tail->value) { return ERROR; } else if (myNum > Q->tail->value || myNum front->value) { printf("对不起,您输入了一个错误的号码\n"); return ERROR; } else { numOfMan = myNum -( Q->front->next->value); return numOfMan; } } #include #include static int bankNumber = 0; static int totalNumber = 0; int stopBank(); int startBank(); int flag = 1; int main() { int choice = 0; int d; int num = 0; LinkQueue Q; initQueue(&Q); while (1) { printf("\n\n#########银行排队系统 #############\n"); printf("### 1:客户进入排队系统; \n"); printf("### 2:客户离开银行 \n"); printf("### 3:查询当前客户前面还有几人 \n"); printf("### 4:查询截止目前总共办理多少客户 \n"); printf("### 5:EXIT \n"); printf(" 请选择[1-5]: "); scanf_s("%d", &choice); switch (choice) { case 1: if (flag) { bankNumber++; enterQueue(&Q, bankNumber); totalNumber++; printf("你的等待号码数字 %d\n", bankNumber); printf("%d 人在您之前,请稍等\n", Query(&Q, bankNumber)); printf("当前的排队成员情况为:"); printQueue(&Q); break; } else { printf(" 停止申请号码\n"); printf("当前的排队成员情况为:"); printQueue(&Q); break; } case 2: deQueue(&Q,&d); printf("您(%d号)已离开银行 ....\n", d); totalNumber--; printf("当前的排队成员情况为:"); printQueue(&Q); break; case 3: printf("请输入您的号码:\n"); scanf_s("%d", &num); printf("%d 人在您之前,请稍等\n", Query(&Q, num)); printf("当前的排队成员情况为:"); printQueue(&Q); break; case 4: printf("截止目前总共办理%d个客户\n", m); printf("当前的排队成员情况为:"); printQueue(&Q); break; case 5: exit(0); break; default: break; } } return OK; } int stopBank() { flag = 0; return 0; } int startBank() { flag = 1; return 0; }运行结果 1、客户进入排队系统 2、客户离开银行 3、查询当前客户前面还有几人 4、查询截止目前总共办理多少客户 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |