网上的相关教程很是多,基础知识自行搜索便可。javascript
习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。前端
参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/Queuejava
特色:git
先进先出。github
用途:算法
模拟流程或其余带有抽象排队属性的事物或逻辑,例如时间循环队列,发布订阅模式的回调队列等等。数组
基本方法数据结构
enqueue()
在队尾插入一个元素dequeue()
从队头删除一个元素getHeader()
获取队头的元素getTail()
获取队尾的元素getLength()
获取队列的长度isEmpty()
判断队列是否为空队列须要留意的问题ide
使用javascript
语言来理解数据结构只可以帮助咱们理解结构的基本特性,因为不涉及底层的原理,因此没法深刻到算法细节的时间复杂度的话题上,对此感兴趣的同窗建议在学习完数据结构入门后再去学习C语言描述版的数据结构资料。函数
Queue
类,并在后续题目中须要用队列时使用它。dancingQueue(str)
,str
中记录着前来参加舞会的人的性别,以空格分割,函数中须要实现将前来跳舞的人按性别分红两队,每当舞池中有空位时,男队和女队的排在最前面的人组成舞伴进入,若是某一队为空时,须要返回对应的消息。PriorityQueue
类,实现优先队列的功能,优先队列的元素带有权重,权重越高(通常认为数字越小权重越高)的越早出队。Queue
类,生成一个Deque
类,容许从队列两端添加和删除元素,所以也叫双向队列。Deque
类判断一个单词是不是回文。javascript中的数组就符合双向队列的特性,试着本身去实现几个特征方法便可。
Deque
类能够从队列两端出队,每次从两端各出队一个元素进行比较便可。循环队列
书中并无说起,它是一种特殊的队列。简单理解就是将基本队列只当作存储结构,而使用front
和rear
两个指针分别表明队列的头和尾,实际对外表现的队列是front
和rear
所指向的元素构成的。为了复用存储空间,循环队列
在存储结构的实现上是首位相连的。
front指针
指向队头rear指针
指向队尾size
队列的长度length
存储空间的大小enqueue()
元素入队dequeue()
元素出队isEmpty()
判断队空isFull()
判断队满getSize()
获取队列长度getLength()
获取存储空间长度clear()
清空队列实现一个CircularQueue
类,并添加一个扩展方法resize()
,当存储空间已满且有元素入队时,自动将存储空间扩充一倍,当元素出队形成队列长度不足存储空间的1/4时,将存储空间减半以释放空间。