设计一个排队系统
来源:互联网 发布:南京二手房成交数据 编辑:程序博客网 时间:2024/04/27 22:43
缘由
这是腾讯2014校园招聘软件开发类笔试试题的附加题题干
请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时反馈到用户。我的解答
这类题属于简答题。我只写了个单机程序。下面是我对这个题思路。首先我们需要一个容器来保存所有人,又由于随时有人加入或者退出,所以我认为用链表结果比较好(在java中就是使用LinkedList)。所以按照进入的顺序,我们对每一个进入的用户都可以返回一个在容器内的位置。有用户退出时就会调用容器类的deleteUser()方法,容器就会删除用户和更新所有人的排名。
所以整个系统有两个类,一个容器类,一个用户类。
- 用户类:主要方法是:加入队伍,返回排名和退出队伍
- 容器类:有一个用户的集合成员变量,加入一个用户(返回该用户的排名),打印所有用户的排名,删除用户(从容器中删除队伍,并且更新所有受影响的用户的排名)。
代码
实现过程中发现linkedlist完全能够满足需求,所有就使用linkedlist了。下面是类图具体代码
import java.util.LinkedList;import java.util.List;/** * 用于装下所有排队的用户 * @author zy */public class Container {static List<Object> container = new LinkedList<Object>(); public static int addUser(User user){container.add(user);return container.size();}public static void printAllUser(){for(int i = 0 ; i < container.size() ; i ++){User user = (User)container.get(i);System.out.println(user.getName()+":"+user.getRank());}}public static boolean deleteUser(User user){boolean flag = container.remove(user);if(flag){updateQueue();}return flag;}public static void deleteFirstUser(){System.out.println("取出队头元素");container.remove(0);updateQueue();}/** * 因为删除了用户,所以我们就需要更新所有用户的排名 * 当然也可以优化一下,因为只有被删的人之后的排名需要更新,而不是所有用户 * 我这样写的原因只是更新所有用户的方法非常简单。 */private static void updateQueue() {for(int i = 0 ; i < container.size() ; i ++){User tempuser = (User)container.get(i);tempuser.setRank(i+1);}}}
/** * 模拟每一个用户 * @author dell * */public class User { private String name;private int rank;public User(String name){this.name=name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getRank() {return rank;}public void setRank(int rank) {this.rank = rank;}public void addQueue(){this.setRank(Container.addUser(this));}public void exitQueue(){if(Container.deleteUser(this)){System.out.println(this.getName()+":成功出队!");}else{System.out.println(this.getName()+":不在队列中!");}}}
main函数
/** * 腾讯2014校园招聘软件开发类笔试试题 * 附加题,第一题: * 请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化, * 队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时反馈到用户 * * @author zy * */public class QueueSystem {public static void main(String[] args) {User user1 = new User("张三");user1.addQueue();User user2 = new User("李四");user2.addQueue();User user3 = new User("王五");user3.addQueue();Container.printAllUser();user2.exitQueue();user2.exitQueue();Container.printAllUser();Container.deleteFirstUser();Container.printAllUser();}}
结果
张三:1李四:2王五:3李四:成功出队!李四:不在队列中!张三:1王五:2取出队头元素王五:1
别人的解答
基于C/S架构的排队系统对比
我觉得该做法不太好的就是:并没有说一定要从队头删除用户。那么我实现的方式就可以成功应对无论用户从何处删除的情况。(全文完)
0 0
- 设计一个排队系统
- 银行排队系统的设计与实现
- 一个客户排队系统中的感想!
- 一个简单的卡动车排队系统
- 排队系统
- 排队系统
- 排队论及排队系统优化
- 基于STC单片机的排队管理系统的设计
- 银行排队系统的设计与实现(源代码)
- 【系统设计】腾讯2014软件开发笔试题目——排队系统设计
- 一个小系统设计
- 设计一个Cache系统
- 设计一个学习系统
- 设计一个监控系统
- 设计一个抽奖系统
- 如何设计一个系统?
- 排队叫号系统
- Erlang排队系统
- Spring静态注入
- Google map接口不能用了,换成Nokia here map!
- SVN常用命令
- 心情之殇
- 附近的现在看血管扩张过来看真的看过这个看看
- 设计一个排队系统
- Finding all elements(which are integer) in an array whose sum is equals to the element exists within
- 到付款现在的高考来自东方陆小凤赫鲁晓夫好了;幸福;
- 再打开I新东方快乐发现了发现了的状况下发给快乐发现了
- 活动社交平台
- 长期盯屏幕 容易导致眼部疾病致失明
- 数据库连接池
- nyoj14会场安排问题
- Permission denied (publickey)