厦门建设工程招标中心的网站,wordpress 新建模板,紫色网站,产业协会建设网站方案目录
三. 栈结构
1.认识栈结构
2. 封装栈结构
3. 应用
3-1 十进制转二进制
3-2 进制转换法
四. 队列
1.队列是什么#xff1f;
2.队列的封装
3. 队列的应用-击鼓传花
4. 双端队列
5.判断是否为回文 三. 栈结构
1.认识栈结构 栈#xff08;stack#xff09;又…目录
三. 栈结构
1.认识栈结构
2. 封装栈结构
3. 应用
3-1 十进制转二进制
3-2 进制转换法
四. 队列
1.队列是什么
2.队列的封装
3. 队列的应用-击鼓传花
4. 双端队列
5.判断是否为回文 三. 栈结构
1.认识栈结构 栈stack又名堆栈它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶相对地把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈它是把新元素放到栈顶元素的上面使之成为新的栈顶元素从一个栈删除元素又称作出栈或退栈它是把栈顶元素删除掉使其相邻的元素成为新的栈顶元素。 特点后进先出即Last in First OutLIFO。 函数调用栈 2. 封装栈结构
class Stack {#items []push(data) {this.#items.push(data)}pop() {return this.#items.pop()}peek() {return this.#items[this.#items.length - 1]}isEmpty() {return this.#items.length 0}size() {return this.#items.length}clear() {this.#items []}toString() {return this.#items.join()}
}
3. 应用 商数是一个整数除法的运算结果表示一个数被另一个数除后所得的整数部分。例如当12被3除时商数为4。余数是一个整数除法的运算结果表示一个数被另一个数除后所得的余数。例如当12被3除时余数为0。 3-1 十进制转二进制
function convert(decNumber) {let remStack new Stack()let number decNumberlet remlet string while (number 0) {rem number % 2remStack.push(rem)// 向下取整number Math.floor(number / 2)}while (!remStack.isEmpty()) {string remStack.pop()}return string
}
console.log(convert(50));
3-2 进制转换法
function convert(decNumber, base) {let remStack new Stack()let number decNumberlet remlet string let baseStr 0123456789ABCDEFwhile (number 0) {rem number % baseremStack.push(rem)number Math.floor(number / base)}while (!remStack.isEmpty()) {string baseStr[remStack.pop()]}return string
}
console.log(convert(500, 16));
四. 队列
1.队列是什么 队列是一种特殊的线性表特殊之处在于它只允许在表的前端front进行删除操作而在表的后端rear进行插入操作和栈一样队列是一种操作受限制的线性表。进行插入操作的端称为队尾进行删除操作的端称为队头。队列中没有元素时称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队从队列中删除一个队列元素称为出队。因为队列只允许在一端插入在另一端删除所以只有最早进入队列的元素才能最先从队列中删除故队列又称为先进先出FIFO—first in first out线性表。 2.队列的封装
class Queue {#items {}#count 0//记录队列尾#lowCount 0 //记录队列头 enqueue(data) {this.#items[this.#count] datathis.#count}dequeue() {if (this.isEmpty()) {return undefined}let res this.#items[this.#lowCount]delete this.#items[this.#lowCount]this.#lowCountreturn res}isEmpty() {return this.size() 0}size() {return this.#count - this.#lowCount}clear() {this.#items {}this.#count 0;this.#lowCount 0}front() {return this.#items[this.#lowCount]}toString() {let str for (let i this.#lowCount; i this.#count; i) {str ${this.#items[i]} }return str}
}3. 队列的应用-击鼓传花 击鼓传花的故事情境类似于一个朋友圈或班级中的游戏一群朋友或同学围成一个圆圈开始传递一朵花。当音乐开始时花会从一个人传递到另一个人当音乐停止时持有花的人将被淘汰。这个过程会不断重复直到只剩下最后一个人。 实现思路使用队列数据结构来模拟人围成的圆圈将人按顺序排列然后通过不断循环传递花的方式来模拟击鼓传花的过程。当音乐停止时从队列或链表中移除当前持有花的人并将花传递给下一个人然后继续播放音乐直到最后只剩下一个人。
function game(list, num) {// 1. 创建一个队列结构let queue new Queue()// 2.将所有人依次加入到队列中for (let i 0; i list.length; i) {queue.enqueue(list[i])}while (queue.size() 1) {// 3.开始数数不是num的时候重新加入到队列的末尾for (let i 0; i num; i) {queue.enqueue(queue.dequeue())}//4.删除队列头console.log(queue.dequeue(), 淘汰了)}// 5.获胜者return {winner: queue.dequeue()}
}let winner game([张三, 李四, 王五, 丽萨, 韩梅梅], 7)
console.log(winner);
4. 双端队列
class DeQueue {#items {}#lowCount 0//记录队列头(记录删除的个数)#count 0//记录队列尾(记录追加的个数)// 从队列头删除removeFront() {if (this.isEmpty()) {return undefined}let res this.#items[this.#lowCount]delete this.#items[this.#lowCount]this.#lowCountreturn res}// 从对列头添加addFront(data) {// 如果为空if (this.isEmpty()) {this.addBack(data)} else {// 代表如果删除过元素if (this.#lowCount 0) {this.#lowCount --this.#items[this.#lowCount] data} else {// 没有删除过元素 lowCount0for (let i this.#count; i 0; i--) {// 假设队列中有一个元素{0:1}; this.#count1; 下面这步骤:1(undefined) {0:1} this.#items[i] this.#items[i - 1]}// 赋值后 {0:1,1:1} 所有数据往前挪动一位 队列头插入this.#items[0] data// 长度增长this.#count}}}// 查找对头元素peekFront() {return this.#items[this.#lowCount]}// 从队尾加入addBack(data) {this.#items[this.#count] datathis.#count}// 从对尾删除removeBack() {if (this.isEmpty()) {return undefined}this.#count--let res this.#items[this.#count]delete this.#items[this.#count]return res}// 查找队尾元素peekBack() {return this.#items[this.#count - 1]}isEmpty() {return this.size() 0}size() {return this.#count - this.#lowCount}clear() {this.#items {}this.#count 0this.#lowCount 0}toString() {let str for (let i this.#lowCount; i this.#count; i) {str ${this.#items[i]} }return str}
}
5.判断是否为回文
function test(params) {const lowStr params.toLocaleLowerCase().split( ).join()let dequeue new DeQueue()for (let index 0; index lowStr.length; index) {dequeue.addBack(lowStr[index])}let isEqual truewhile (dequeue.size() 1) {if (dequeue.removeFront() ! dequeue.removeBack()) {isEqual falsebreak;}}return isEqual
}
文章转载自: http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.yswxq.cn.gov.cn.yswxq.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.jbctp.cn.gov.cn.jbctp.cn http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn http://www.morning.mjdbd.cn.gov.cn.mjdbd.cn http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.wfwqr.cn.gov.cn.wfwqr.cn http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn http://www.morning.yxplz.cn.gov.cn.yxplz.cn http://www.morning.hjrjr.cn.gov.cn.hjrjr.cn http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn http://www.morning.wjwfj.cn.gov.cn.wjwfj.cn http://www.morning.dtfgr.cn.gov.cn.dtfgr.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.txnqh.cn.gov.cn.txnqh.cn http://www.morning.ghccq.cn.gov.cn.ghccq.cn http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn http://www.morning.fpkpz.cn.gov.cn.fpkpz.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.xqndf.cn.gov.cn.xqndf.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.yskhj.cn.gov.cn.yskhj.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.gqflj.cn.gov.cn.gqflj.cn http://www.morning.lwjlj.cn.gov.cn.lwjlj.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn http://www.morning.qlpq.cn.gov.cn.qlpq.cn http://www.morning.fhykt.cn.gov.cn.fhykt.cn http://www.morning.fsqbx.cn.gov.cn.fsqbx.cn http://www.morning.zlrsy.cn.gov.cn.zlrsy.cn http://www.morning.yrqb.cn.gov.cn.yrqb.cn http://www.morning.fydsr.cn.gov.cn.fydsr.cn http://www.morning.skbhl.cn.gov.cn.skbhl.cn http://www.morning.kxypt.cn.gov.cn.kxypt.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.leyuhh.com.gov.cn.leyuhh.com http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn http://www.morning.lngyd.cn.gov.cn.lngyd.cn http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn http://www.morning.qnklx.cn.gov.cn.qnklx.cn http://www.morning.bpmtg.cn.gov.cn.bpmtg.cn http://www.morning.nzlsm.cn.gov.cn.nzlsm.cn http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.mlwpr.cn.gov.cn.mlwpr.cn http://www.morning.dppfh.cn.gov.cn.dppfh.cn http://www.morning.ppghc.cn.gov.cn.ppghc.cn http://www.morning.rnds.cn.gov.cn.rnds.cn http://www.morning.rpjr.cn.gov.cn.rpjr.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.fyzsq.cn.gov.cn.fyzsq.cn http://www.morning.kjmws.cn.gov.cn.kjmws.cn http://www.morning.rcjqgy.com.gov.cn.rcjqgy.com http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.kxypt.cn.gov.cn.kxypt.cn http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn http://www.morning.fmkbk.cn.gov.cn.fmkbk.cn http://www.morning.drfcj.cn.gov.cn.drfcj.cn http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn http://www.morning.jnkng.cn.gov.cn.jnkng.cn http://www.morning.bztzm.cn.gov.cn.bztzm.cn http://www.morning.rcrnw.cn.gov.cn.rcrnw.cn http://www.morning.wqjpl.cn.gov.cn.wqjpl.cn http://www.morning.snrbl.cn.gov.cn.snrbl.cn http://www.morning.syfty.cn.gov.cn.syfty.cn http://www.morning.wbxtx.cn.gov.cn.wbxtx.cn http://www.morning.nkcfh.cn.gov.cn.nkcfh.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.yxdrf.cn.gov.cn.yxdrf.cn http://www.morning.qrhh.cn.gov.cn.qrhh.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn