2014-04-23 18:10

题目:设计一个点唱机。

解法:英文叫Musical Jukebox。这是点唱机么?卡拉OK么?这种题目实在是云里雾里,又没有交流的余地,我索性用一个vector来表示一首曲子吧。不过有一点是肯定的,点播行为和播放行为应该分不同线程操作,这样就不至于让机器一直卡在那儿等你点歌了。

代码:

 // 8.3 Design a data structure to simulate a musical jukebox.
#include <iostream>
#include <queue>
#include <string>
#include <thread>
#include <vector>
using namespace std; class JukeBox {
public:
JukeBox() {}; void start() {
work = new thread(workThread, this);
}; void addSong(vector<int> &song) {
songs.push_back(song);
} void orderSong(int id) {
if (id < || id > (int)songs.size() - ) {
return;
}
song_list.push(id);
} friend void workThread(JukeBox *); ~JukeBox() {
while (!song_list.empty()) {
song_list.pop();
}
size_t i;
for (i = ; i < songs.size(); ++i) {
songs[i].clear();
}
songs.clear();
work->detach();
delete work;
};
private:
queue<int> song_list;
vector<vector<int> > songs;
thread *work;
}; void workThread(JukeBox *jb) {
size_t i;
while (true) {
if (!jb->song_list.empty()) {
for (i = ; i < jb->songs[jb->song_list.front()].size(); ++i) {
cout << jb->songs[jb->song_list.front()][i] << ' ';
}
cout << endl;
jb->song_list.pop();
}
}
}; int main()
{
JukeBox *jb;
string cmd;
int id;
int i, n;
vector<int> song; jb = new JukeBox();
jb->start();
while (cin >> cmd) {
if (cmd == "add") {
cin >> n;
song.resize(n);
for (i = ; i < n; ++i) {
cin >> song[i];
}
jb->addSong(song);
} else if (cmd == "order") {
cin >> id;
jb->orderSong(id);
} else if (cmd == "end") {
break;
}
}
delete jb; return ;
}

《Cracking the Coding Interview》——第8章:面向对象设计——题目3的更多相关文章

  1. Cracking the coding interview 第一章问题及解答

    Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...

  2. 《Cracking the Coding Interview》读书笔记

    <Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...

  3. Cracking the coding interview

    写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...

  4. Cracking the coding interview目录及资料收集

    前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...

  5. Cracking the Coding Interview(Trees and Graphs)

    Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...

  6. Cracking the Coding Interview(Stacks and Queues)

    Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...

  7. 《Cracking the Coding Interview》——第8章:面向对象设计——题目10

    2014-04-24 00:05 题目:用拉链法设计一个哈希表. 解法:一个简单的哈希表,就看成一个数组就好了,每个元素是一个桶,用来放入元素.当有多个元素落入同一个桶的时候,就用链表把它们连起来.由 ...

  8. 《Cracking the Coding Interview》——第8章:面向对象设计——题目9

    2014-04-23 23:57 题目:如何设计一个内存文件系统,如果可以的话,附上一些代码示例. 解法:很遗憾,对我来说不可以.完全没有相关经验,所以实在无从入手.这题目应该和工作经验相关吧? 代码 ...

  9. 《Cracking the Coding Interview》——第8章:面向对象设计——题目8

    2014-04-23 23:49 题目:有个棋牌游戏叫Othello,也叫Reversi.请看游戏规则.中文应该叫黑白棋吧,不常玩儿就是了. 解法:既然这题的规则很清楚,也很清楚,我就写了一个命令行的 ...

  10. 《Cracking the Coding Interview》——第8章:面向对象设计——题目7

    2014-04-23 23:38 题目:你要如何设计一个聊天服务器,有什么技术难点? 解法:这是基于工作经验的面试题吗?否则,一个new grad碰上这种题目能打点草稿也就算不错了. 代码: // 8 ...

随机推荐

  1. 笨办法学Python(二十一)

    习题 21: 函数可以返回东西 你已经学过使用 = 给变量命名,以及将变量定义为某个数字或者字符串.接下来我们将让你见证更多奇迹.我们要演示给你的是如何使用 = 以及一个新的 Python 词汇ret ...

  2. js 关系运算符

    1.大于  >   (小于 效果一样) > //true > //false //false,如果有一个字符串,字符串转换成数值在比较 ' //true,如果两个都是字符串,则比较第 ...

  3. Html : 将submit变成像文字一样的按钮

    直接上代码: <html> <head> <title>像文字一样的按钮</title> <style> body{ background- ...

  4. url获取MVC域,action,controller的方法

    域:filterContext.RequestContext.RouteData.DataTokens["area"] 控制器:filterContext.RequestConte ...

  5. 【LOJ6043】「雅礼集训 2017 Day7」蛐蛐国的修墙方案(搜索技巧题)

    点此看题面 大致题意: 给你一个长度为\(n\)的排列\(p\),要求构造一个合法的括号序列,使得如果第\(i\)个位置是左括号,则第\(p_i\)个位置一定是右括号. 暴搜 很容易想出一个暴搜. 即 ...

  6. 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)

    最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...

  7. 移动页面请使用CSS3动画

    说到动画,我们一般会使用jQuery 中的animate(); 在PC浏览器中,是很方便的,由于PC的高性能,这种不断修改DOM的做法确实不会出现太大的问题,但是在手机端就不同了. 手机上使用jQue ...

  8. C# return语句

    一.C# return语句 return语句用于终止它出现在其中的方法的执行,并将控制返回给调用方法. 语法格式如下: return ...;return语句还可以返回一个可选值.如果方法为void类 ...

  9. HTTP请求与服务器响应流程

    1. HTTP 简介 1.1定义 1.2 请求/响应报文格式 1.3请求方式--GET/POST     状态码 1.4 响应状态 2. HTTP请求,浏览器做了什么, 服务端处理解析过程 1:HTT ...

  10. LeetCode426.Convert Binary Search Tree to Sorted Doubly Linked List

    题目 Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right point ...