1.代码题,用C++实现一个容量为N的循环队列类,要求提供push和pop接口
底层数据结构用一个int数组data[N]
设置两个坐标,第一个坐标head表示队首,第二个坐标tail表示队尾,初始时head=tail=0
队列满时的判断条件是:(tail+1)%N==head
队列空时的判断条件是:tail==head
注意:tail实际指向下一个元素入队时的坐标,此种方法会使N个空间中只有N-1个能被循环队列使用
push入队时,先判断队列是否已满,如果没满则往data[tail]处写数据,之后tail=(tail+1)%N
pop出队时,先判断队列是否已空,如果没空则从data[head]处读数据,之后head=(head+1)%N
2.代码题,用C++实现一个数据结构,它表示一堆整数的集合,并且提供两个接口:add()向集合中添加一个整数,count(int k)返回集合中比k小的元素的个数
基本思想:搜索二叉树,每个结点存储其左子树的结点数量lnum
add操作时,从根结点开始与插入值比较,如果结点的值比插入值大,则lnum++,同时结点移向其左孩子;如果结点的值比插入值小,则结点移向其右孩子。移动过程中要记录上一个结点pre以及移动的方向,最后当前结点为NULL时,插入新结点,并把新结点设为上一个结点pre的左孩子或右孩子(根据移动方向判断)
count操作时,设置一个计数变量cnt=0,从根结点开始与k比较,如果结点的值比k小,则cnt+=当前结点的lnum+1,然后当前结点移向其右孩子;如果当前结点的值比k大,则直接移向其左孩子。结束循环的条件是当前结点为NULL
3.socket编程中间件ICE介绍
ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。前面我们提到过在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分布式的部署管理,消息中间件,以及网格计算等等。