关于银行排队叫号系统算法的实现

mafei003 2009-11-12 12:55:32
麻烦大家帮我解决下面一道题
先谢谢啦!

关于去银行取钱的取号排队取钱的首先取号然后排队进行办理业务,遵循先取号先办理业务
要求编写实现程序,使用户按先到先办理业务的规则获取号码,同时提示当前要等待的人数有多少,编写连接队的操作函数,实现银行银行排队叫号算法
1.采用循环队列
2.客户每按依稀取号服务,则调用一次入队函数,并给出该客户的队列号,同时统计该客户后面等待的人数
3.银行柜台服务人员每叫一次号,则调用一次出队函数,读取对头元素,提示到第几个 顾客办理业务
...全文
1627 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyldf 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mafei003 的回复:]
我写了,但运行以后不对啊!也调了好几次
[/Quote]
你可以把代码贴上来,大家帮你看啊
mafei003 2009-11-12
  • 打赏
  • 举报
回复
我写了,但运行以后不对啊!也调了好几次
  • 打赏
  • 举报
回复
1.采用循环队列
2.客户每按依稀取号服务,则调用一次入队函数,并给出该客户的队列号,同时统计该客户后面等待的人数
3.银行柜台服务人员每叫一次号,则调用一次出队函数,读取对头元素,提示到第几个 顾客办理业务


楼主,队列还不会写吗?入队,出队,都是基本的数据结构。
clhposs 2009-11-12
  • 打赏
  • 举报
回复

//天啊,我太菜了,写得好烂,哎
//下面为模版类
#ifndef QUEUE_CLASS_H
#define QUEUE_CLASS_H

template<class T>
class Queue
{
public:
Queue();
~Queue();
Queue(const T &que);
Queue& operator=(const Queue &que);

void copy(Queue<T> &queue1, const Queue<T> &queue2);
void destroy();
int size();
int EnQueue(const T &a);
T next();
T DeQueue();
private:
int i;
T* head;
T* end;
};

template<class T>
Queue<T>::Queue()
{
head = new T();
head->next = NULL;
end = head;
}

template<class T>
int Queue<T>::size()
{
int size = 0;
T* p = head;

while ((p = p->next) != end)
++size;
return ++size;
}

template<class T>
int Queue<T>::EnQueue(const T &a)
{
T *tmp;
tmp = new T(a);
end->next = tmp;
end = tmp;
end->next = head->next;

return size() - 1;
}

template<class T>
T Queue<T>::DeQueue()
{
if (head->next == NULL)
{
return *head;
}
T *tmp = head->next;
head->next = tmp->next;
T t(*tmp);
free(tmp);
return t;
}

template<class T>
void Queue<T>::destroy()
{
T *p = head->next;

while (p != end)
{
head->next = p->next;
free(p);
p = head->next;
}
free(end);
free(head);
}

template<class T>
Queue<T>::~Queue()
{
destroy();
}

template<class T>
void Queue<T>::copy(Queue<T> &queue1, const Queue<T> &queue2)
{
queue1.head = new T;
queue1.head-> = NULL;
queue1.end = head;

T *p = queue2.head;
T *tmp;

while (p != queue2.end)
{
tmp = new T(*p);
queue1.end->next = tmp;
tmp->next = queue1.head->next;
queue1.end = queue1.head->next;
}
tmp = new T(*queue2.end);
queue1.end->next = tmp;
tmp->next = queue1.head->next;
queue1.end = tmp;
}

template<class T>
Queue<T>& Queue<T>::operator =(const Queue<T> &que)
{
destroy();
copy(*this, que);

}

template<class T>
Queue<T>::Queue(const T &que)
{
copy(*this, que);
}

template<class T>
T Queue<T>::next()
{
if (size() >= 2)
return *head->next;
else
return *head;
}
#endif

//主函数
#include <iostream>
#include "Queue.h"

struct People
{
int i;
struct People *next;
};

int main()
{
Queue<People> queue;

std::cout << "\t\t\t\t银行排队叫号系统算法" << std::endl;

for (int i = 1; i <= 10; ++i)
{
People p;
p.i = i;
std::cout << "你的ID为" << i << "你前面目前还有" << queue.EnQueue(p) << std::endl;
}

std::cout << "当前正在处理号码:" << queue.DeQueue().i << std::endl;
std::cout << "下一位ID:" << queue.next().i << "请做准备" << std::endl;

system("pause");
return 0;
}
shuilongyin_00 2009-11-12
  • 打赏
  • 举报
回复

很像作业帖哦!
会锁定的!

建立数组,利用指针……
threenewbee 2009-11-12
  • 打赏
  • 举报
回复
很简单,像作业题。
1、2、3已经把怎么实现的思路说得很清楚了,照着做就行了。
线性表 某软件公司大约有30名员工,每名员工有姓名、工、职务等属性,每年都有员工离职和入职。 把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。 约瑟夫(Josephus)环问题:编为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序。 栈和队列 某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。 汽车的输入信息格式可以是(进入/离开,车牌,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。 某银行营业厅共有6个营业窗口,设有排队系统广播叫,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1窗口,银行卡业务指定2、3、4窗口,理财卡业务指定5、6窗口。但如果5、6窗口全忙,而2、3、4窗口有空闲时,理财卡业务也可以在空闲的2、3、4窗口之一办理。 客户领、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。 5、4阶斐波那契序列如下:f0=f1=f2=0, f3=1,…,fi=fi-1+fi-2+fi-3+fi-4, 利用容量为k=4的循环队列,构造序列的前n+1项(f0, f1 , f2 ,… fn ),要求满足fn ≤200而fn+1 >200。 6、八皇后问题:设8皇后问题的解为 (x1, x2, x3, …,x8), 约束条件为:在8x8的棋盘上,其中任意两个xi 和xj不能位于棋盘的同行、同列及同对角线。要求用一位数组进行存储,输出所有可能的排列。 7、迷宫求解:用二维矩阵表示迷宫,自动生成或者直接输入迷宫的格局,确定迷宫是否能走通,如果能走通,输出行走路线。 8、英国人格思里于1852年提出四色问题(four colour problem,亦称四色猜想),即在为一平面或一球面的地图着色时,假定每一个国家在地图上是一个连通域,并且有相邻边界线的两个国家必须用不同的颜色,问是否只要四种颜色就可完成着色。现在给定一张地图,要求对这张地图上的国家用不超过四种的颜色进行染色。 要求建立地图的邻接矩阵存储结构,输入国家的个数和相邻情况,输出每个国家的颜色代码。 9、以下问题要求统一在一个大程序里解决。 从原四则表达式求得后缀式,后缀表达式求值,从原四则表达式求得中缀表达式,从原四则表达式求得前缀表达式,前缀表达式求值。 数组与广义表 鞍点问题: 若矩阵A中的某一元素A[i,j]是第i行中的最小值,而又是第j列中的最大值,则称A[i,j]是矩阵A中的一个鞍点。写出一个可以确定鞍点位置的程序。 稀疏矩阵转置: 输入稀疏矩阵中每个元素的行、列、值,建立稀疏矩阵的三元组存储结构,并将此矩阵转置,显示转置前后的三元组结构。 用头尾链表存储表示法建立广义表,输出广义表,求广义表的表头、广义表的表尾和广义表的深度。 树和二叉树 以下问题要求统一在一个大程序里解决。 按先序遍历的扩展序列建立二叉树的存储结构 二叉树先序、中序、后序遍历的递归算法 二叉树中序遍历的非递归算法 二叉树层次遍历的非递归算法 求二叉树的深度(后序遍历) 建立树的存储结构 求树的深度 图 输入任意的一个网,用普里姆(Prim)算法构造最小生成树。 要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的深度优先搜索遍历路径。 要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的广度优先搜索遍历路径。 查找 设计一个读入一串整数构成一颗二叉排序树的程序,从二叉排序树中删除一个结点,使该二叉树仍保持二叉排序树的特性。 24、设定哈希函数 H(key) = key MOD 11 ( 表长=11 ),输入一组关键字序列,根据线性探测再散列解决冲突的方法建立哈希表的存储结构,显示哈希表,任意输入关键字,判断是否在哈希表中。 排序 以下问题要求统一在一个大程序里解决。 25、折半插入排序 26、冒泡排序 27、快速排序 28、简单选择排序 29、归并排序 30、堆排序

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧