- 队列只能在队首删除元素(出队),队尾增加元素(入队)
//定义队列
function Queue(){
this.dataStore = [];
this.enqueue = enqueue; //入队
this.dequeue = dequeue; //出队
this.front = front; //查看队首元素
this.back = back; //查看队尾元素
this.toString = toString; //显示队列所有元素
this.clear = clear; //清空当前队列
this.empty = empty; //判断当前队列是否为空
}
- enqueque:入队操作
//向队列末尾添加一个元素,直接调用 push 方法即可
function enqueue ( element ) {
this.dataStore.push( element );
}
- dequeque:出队操作
//删除队列首的元素,可以利用 JS 数组中的 shift 方法
function dequeue () {
if( this.empty() ) return 'This queue is empty';
else this.dataStore.shift();
}
- empty:判空操作
empty:判断队列是否为空
//我们通过判断 dataStore 的长度就可知道队列是否为空
function empty(){
if( this.dataStore.length == 0 ) return true;
else return false;
}
- front:查看队首元素
//查看队首元素,直接返回数组首个元素即可
function front(){
if( this.empty() ) return 'This queue is empty';
else return this.dataStore[0];
}
- back:查看队尾元素
//查看队首元素,直接返回数组最后一个元素即可
//读取队列尾的元素
function back () {
if( this.empty() ) return 'This queue is empty';
else return this.dataStore[ this.dataStore.length - 1 ];
}
- toString:查看队列中所有元素
//查看对了所有元素,我这里采用数组的 join 方法实现
function toString(){
return this.dataStore.join(' ');
}
- clear:清空当前队列
// 我们直接将 dataStore 指针清空即可
function clear(){
delete this.dataStore;
this.dataStore = [];
}
- 基数排序
//基数排序
var queues = []; //定义队列数组
var nums = []; //定义数字数组
//选十个0~99的随机数进行排序
for ( var i = 0 ; i < 10 ; i ++ ){
queues[i] = new Queue();
nums[i] = Math.floor( Math.random() * 101 );
}
//排序之前
console.log( 'before radix sort: ' + nums );
//基数排序
distribution( nums , queues , 10 , 1 );
collect( queues , nums );
distribution( nums , queues , 10 , 10 );
collect( queues , nums );
//排序之后
console.info('after radix sort: ' + nums );
//根据相应的(个位和十位)数值,将数字分配到相应队列
function distribution ( nums , queues , n , digit ) { //digit表示个位或者十位的值
for( var i = 0 ; i < n ; i++ ){
if( digit == 1){
queues[ nums[i] % 10 ].enqueue( nums[i] );
}else{
queues[ Math.floor( nums[i] / 10 ) ].enqueue( nums[i] );
}
}
}
//从队列中收集数字
function collect ( queues , nums ) {
var i = 0;
for ( var digit = 0 ; digit < 10 ; digit ++ ){
while ( !queues[digit].empty() ){
nums[ i++ ] = queues[digit].front();
queues[digit].dequeue();
}
}
}
参考链接:
https://www.jianshu.com/p/1157aaccad36