日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript数据结构与算法——队列详解(下)

發(fā)布時(shí)間:2023/12/31 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript数据结构与算法——队列详解(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

接下來會(huì)借助本人另一篇文章JavaScript數(shù)據(jù)結(jié)構(gòu)與算法——隊(duì)列詳解(上)中實(shí)現(xiàn)的隊(duì)列類及其方法實(shí)現(xiàn)一個(gè)應(yīng)用。

配對問題

需求分析:在一個(gè)文件中保存著一份男女混合的數(shù)據(jù),名稱前以B開頭表示男士,以G開頭表示女士,將文件中的男女讀出來,分別放進(jìn)一個(gè)隊(duì)列,兩兩配對(比如排成兩隊(duì),相對的匹配男女朋友),直至有一方人數(shù)為0,若剛好雙雙配對成功,則顯示“全部配對完成”,若有人沒配對成功,則顯示沒配對成功的人的性別及其名稱。

文件準(zhǔn)備

準(zhǔn)備一份包含男女的文件,本人準(zhǔn)備的是people.txt,內(nèi)容格式如下:

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 }

讀取文件,分配入隊(duì)

讀取文件我們可以借助nodejs的文件系統(tǒng)fs讀取文件,然后使用字符串、數(shù)組之間的轉(zhuǎn)換函數(shù)實(shí)現(xiàn)人名的分割,隨后按男女保存到各自的隊(duì)列中。

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()}// 性別與名稱分割,并按性別入隊(duì)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))}} }

實(shí)現(xiàn)配對方法

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() + '個(gè)男士缺少女士配對!!')}if (girlsQueue.count() > 0) {console.log('有' + girlsQueue.count() + '個(gè)女士缺少男士配對!!')}if ((girlsQueue.count() === 0) && (boysQueue.count() === 0)) {console.log('恭喜!!剛好全部配對完畢,不存在有人單身啦!!!')} }

這個(gè)比較簡單,就不注釋了,有疑問的話研究一下代碼就能理解。

測試用例

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 = [] // 存放數(shù)據(jù)this.enQueue = enQueue // 入隊(duì)操作this.deQueue = deQueue // 出隊(duì)操作this.first = first // 訪問第一個(gè)元素this.last = last // 訪問最后一個(gè)元素this.toString = toString // 顯示隊(duì)列中的數(shù)據(jù)this.empty = empty // 清空隊(duì)列數(shù)據(jù)this.count = count // 顯示隊(duì)列當(dāng)前元素?cái)?shù)量 }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()}// 性別與名稱分割,并按性別入隊(duì)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() + '個(gè)男士缺少女士配對!!')}if (girlsQueue.count() > 0) {console.log('有' + girlsQueue.count() + '個(gè)女士缺少男士配對!!')}if ((girlsQueue.count() === 0) && (boysQueue.count() === 0)) {console.log('恭喜!!剛好全部配對完畢,不存在有人單身啦!!!')} } // testvar boysQueue = new Queue() var girlsQueue = new Queue() getPerson(boysQueue, girlsQueue) match(boysQueue, girlsQueue)

運(yùn)行及結(jié)果

在node環(huán)境下使用node queue.js,運(yùn)行結(jié)果如下:

結(jié)合上篇及本篇,一個(gè)JavaScript實(shí)現(xiàn)的隊(duì)列類實(shí)現(xiàn)完成,并實(shí)現(xiàn)完整一個(gè)匹配應(yīng)用,至此,JavaScript數(shù)據(jù)結(jié)構(gòu)與算法——隊(duì)列詳解篇完結(jié),一般都是深夜編寫,也許會(huì)有些錯(cuò)誤,歡迎指出,謝謝O(∩_∩)O~~

總結(jié)

以上是生活随笔為你收集整理的JavaScript数据结构与算法——队列详解(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。