隊列(Queue)是一種先進先出(First-In-First-Out, FIFO)的數據結構,與棧不一樣的是,它操做的元素是在兩端,並且進行的是不同的操做。向隊列的隊尾加入一個元素叫作入隊列(enQueue),向隊列的隊首刪除一個元素叫作出隊列(delQueue).javascript
Queue --- length,屬性,隊列長度 dataStore,屬性,存儲數據 enQueue,方法,入隊列 delQueue,方法,出隊列 empty,方法,清空隊列 front,方法,得到隊首元素 rear,方法,得到隊尾元素 print,方法,打印隊列
// 構造函數 function Queue () { this.length = 0; this.dataStore = []; }
// 原型核心方法 Queue.prototype = { constructor: Queue, enQueue: function (element) { // 存儲元素並使隊列長度加1 this.dataStore[this.length++] = element; }, delQueue: function () { var res = this.dataStore[0], //取得隊首元素 i; // 當隊列不爲空 if (res !== undefined) { // 這裏儘可能避免使用js語言特性來實現 // 取出隊首元素,並讓隊列後方元素向前移動,隊列長度減一 // js數組其實已經實現了隊列的方法,刪除隊首shift if (this.length > 1) { for (i = 0; i < this.length - 1; i++) { this.dataStore[i] = this.dataStore[i + 1]; } this.dataStore.length -= 1; } else { // 當只有一個元素時,出隊列後數組爲空 this.dataStore = []; } this.length -= 1; } return res; }, }
// 其餘方法 empty: function () { this.dataStore.length = 0; this.length = 0; }, front: function () { return this.dataStore[0]; }, rear: function () { return this.dataStore[this.length - 1]; }, print: function () { for (var i = 0; i < this.length; i++) { console.log(this.dataStore[i] + '\n'); } }
var q = new Queue(); q.enQueue('jiavan'); q.enQueue('jiavan2'); q.enQueue('jiavan3'); q.enQueue('jiavan4'); q.print(); q.delQueue(); // jiavan q.length; // 3 q.front(); //jiavan2 q.rear();// jiavan4 q.empty(); q.dataStore; //[]
系列文章原文地址https://github.com/Jiavan/js4algs GitHub repo上有源碼和更好的閱讀體驗,如有錯誤歡迎發PR,若對你有所幫助也歡迎star!java