首页 > 代码库 > javascript中的队列结构

javascript中的队列结构

1.概念

  队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构。队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在银行拿的号子,排在前面的人拥有优先服务权。队列是一种FIFO(First In First Out)。队列用在很多地方,比如提交操作系统执行一系列的进程,打印任务池等,一些仿真系统使用队列来模拟银行或者超时里排队的顾客。

  队列主要有两种操作,祥队列中插入新元素和删除队列中的元素。插入操作也叫入队,删除操作也叫出队。入队操作在队尾插入新元素,出队操作删除队头的元素。队列的应外一项重要操作是读取队头的元素,这个操作叫做peek(),这个操作返回对头元素,并不删除它。除了读取对头元素我们还想知道队列中存储了多少元素,可以使用length属性满足该要求,想要清空队列中的所有元素,可以使用clear()方法来实现。

  使用数组来实现队列看起来顺理成章,javascript中的数组有其他编程语言中没有的有点,数组使用push()方法可以在数组的末尾加入元素,使用shift()方法可以删除数组的第一个元素。push()方法将它的参数插入数组中第一个开放的位置,该位置总在数组的末尾,即使是一个空数组也是。就是说push()插入的元素总是数组的最有一个元素。看下面的例子:  

names = [];name.push("Cynthia");names.push("Jennifer");

现在数组中的第一个元素是Cynthia,第二个元素是Jennifer。

  使用shift()方法删除数组的第一个元素。

  下面看看队列的实现方法:

/*--------------Queue类的定义和测试代码----------------*/function Queue(){        this.dataStore = [];        this.enqueue = enqueue;        this.dequeue = dequeue;        this.front = front;        this.back = back;        this.toString = toString;        this.empty = empty;}//入队,就是在数组的末尾添加一个元素function enqueue(element){    this.dataStore.push(element);}//出队,就是删除数组的第一个元素function dequeue(){    return this.dataStore.shift();}//取出数组的第一个元素function front(){    return this.dataStore[0];}//取出数组的最后一个元素function back(){    return this.dataStore[this.dataStore.length-1];}function toString(){    var retStr = "";    for (var i=0; i<this.dataStore.length; ++i) {        retStr += this.dataStore[i] + "&nbsp;"    }    return retStr;}//判断数组是否为空function empty(){    if(this.dataStore.length == 0){        return true;    }else{        return false;    }    }//返回数组中元素的个数function count(){    return this.dataStore.length;}var q = new Queue();q.enqueue("Meredith");q.enqueue("Cynthia");q.enqueue("Jennifer");document.write(q.toString());document.write(‘<br>‘);document.write("Front of queue is:" + q.front());document.write(‘<br>‘);document.write("Back of queue is:" + q.back());

最后的输出结果为:

技术分享

 

javascript中的队列结构