當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript数据结构与算法——队列详解(下)
生活随笔
收集整理的這篇文章主要介紹了
JavaScript数据结构与算法——队列详解(下)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
接下來會借助本人另一篇文章JavaScript數據結構與算法——隊列詳解(上)中實現的隊列類及其方法實現一個應用。
配對問題
需求分析:在一個文件中保存著一份男女混合的數據,名稱前以B開頭表示男士,以G開頭表示女士,將文件中的男女讀出來,分別放進一個隊列,兩兩配對(比如排成兩隊,相對的匹配男女朋友),直至有一方人數為0,若剛好雙雙配對成功,則顯示“全部配對完成”,若有人沒配對成功,則顯示沒配對成功的人的性別及其名稱。
文件準備
準備一份包含男女的文件,本人準備的是people.txt,內容格式如下:
G 小花1 G 小花2 B 小明1 B 小明2 B 小明3 B 小明4 G 小花3 B 小明5 G 小花4 B 小明6 G 小花5定義Person對象,保存待匹配者信息
function Person(name, sex) {this.name = namethis.sex = sex }讀取文件,分配入隊
讀取文件我們可以借助nodejs的文件系統fs讀取文件,然后使用字符串、數組之間的轉換函數實現人名的分割,隨后按男女保存到各自的隊列中。
function getPerson(boysQueue, girlsQueue) {// 讀取包含性別的名字var names = fs.readFileSync('people.txt')// 分行保存var namesArray = names.toString().split('\n')// 取出末尾空格for (var i = 0; i < namesArray.length; i++) {namesArray[i] = namesArray[i].trim()}// 性別與名稱分割,并按性別入隊for (var i = 0; i < namesArray.length; i++) {var sexAndName = namesArray[i].split(' ')var sex = sexAndName[0]var name = sexAndName[1]if (sex === 'B') {boysQueue.enQueue(new Person(name, sex))} else {girlsQueue.enQueue(new Person(name ,sex))}} }實現配對方法
function match(boysQueue, girlsQueue) {var currBoy, currGirlwhile (!boysQueue.empty() && !girlsQueue.empty()) {currBoy = boysQueue.deQueue()currGirl = girlsQueue.deQueue()console.log(currBoy.name + '與' + currGirl.name + '配對成功啦!!!')}if (boysQueue.count() > 0) {console.log('有' + boysQueue.count() + '個男士缺少女士配對!!')}if (girlsQueue.count() > 0) {console.log('有' + girlsQueue.count() + '個女士缺少男士配對!!')}if ((girlsQueue.count() === 0) && (boysQueue.count() === 0)) {console.log('恭喜!!剛好全部配對完畢,不存在有人單身啦!!!')} }這個比較簡單,就不注釋了,有疑問的話研究一下代碼就能理解。
測試用例
var boysQueue = new Queue() var girlsQueue = new Queue() getPerson(boysQueue, girlsQueue) match(boysQueue, girlsQueue)與上篇代碼整合后的完整代碼queue.js如下
// Created by xiaoqiang on 07/04/2018. var fs = require('fs') function Queue() {this.data = [] // 存放數據this.enQueue = enQueue // 入隊操作this.deQueue = deQueue // 出隊操作this.first = first // 訪問第一個元素this.last = last // 訪問最后一個元素this.toString = toString // 顯示隊列中的數據this.empty = empty // 清空隊列數據this.count = count // 顯示隊列當前元素數量 }function enQueue(param) {this.data.push(param)return this }function deQueue() {return this.data.shift() }function first() {return this.data[0] }function last() {return this.data[this.data.length - 1] }function toString() {var str = ''for (var i = 0; i < this.data.length; i++) {str += this.data[i] + '\n'}return str }function empty() {if (this.data.length === 0) {return true} else {return false} }// 以下為下篇代碼 function count() {return this.data.length }function Person(name, sex) {this.name = namethis.sex = sex }function getPerson(boysQueue, girlsQueue) {// 讀取包含性別的名字var names = fs.readFileSync('people.txt')// 分行保存var namesArray = names.toString().split('\n')// 取出末尾空格for (var i = 0; i < namesArray.length; i++) {namesArray[i] = namesArray[i].trim()}// 性別與名稱分割,并按性別入隊for (var i = 0; i < namesArray.length; i++) {var sexAndName = namesArray[i].split(' ')var sex = sexAndName[0]var name = sexAndName[1]if (sex === 'B') {boysQueue.enQueue(new Person(name, sex))} else {girlsQueue.enQueue(new Person(name ,sex))}} }function match(boysQueue, girlsQueue) {var currBoy, currGirlwhile (!boysQueue.empty() && !girlsQueue.empty()) {currBoy = boysQueue.deQueue()currGirl = girlsQueue.deQueue()console.log(currBoy.name + '與' + currGirl.name + '配對成功啦!!!')}if (boysQueue.count() > 0) {console.log('有' + boysQueue.count() + '個男士缺少女士配對!!')}if (girlsQueue.count() > 0) {console.log('有' + girlsQueue.count() + '個女士缺少男士配對!!')}if ((girlsQueue.count() === 0) && (boysQueue.count() === 0)) {console.log('恭喜!!剛好全部配對完畢,不存在有人單身啦!!!')} } // testvar boysQueue = new Queue() var girlsQueue = new Queue() getPerson(boysQueue, girlsQueue) match(boysQueue, girlsQueue)運行及結果
在node環境下使用node queue.js,運行結果如下:
結合上篇及本篇,一個JavaScript實現的隊列類實現完成,并實現完整一個匹配應用,至此,JavaScript數據結構與算法——隊列詳解篇完結,一般都是深夜編寫,也許會有些錯誤,歡迎指出,謝謝O(∩_∩)O~~
總結
以上是生活随笔為你收集整理的JavaScript数据结构与算法——队列详解(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你想关掉路由器吗-如何关路由器
- 下一篇: Vue.JS项目中二级路由下刷新浏览器仍