IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 栈和队列的应用 -> 正文阅读

[数据结构与算法]栈和队列的应用


前言

最近在看数据结构和算法的书,《学习JavaScript数据结构和算法》。记录一下一些感兴趣的算法


一、栈

栈是先进后出的原则


// 栈的类
function Stack(){
	// 栈模拟数据
	let items = []
	// 添加数据。自动加到栈尾
	this.push = function(e){
		items.push(e)
	}
	// 删除数据。自动删除栈尾
	this.pop = function(){
		return items.pop()
	}
	//查看栈尾数据
	this.peek = function(){
		return items[items.length-1]
	}
	// 查看栈内是否有数据
	this.isEmpty = function(){
		return items.length == 0
	}
	// 查看栈的长度
	this.size = function(){
		return items.length
	}
	// 清空栈
	this.clear = function(){
		items = []
	}
}


// 进制转换的方法,传入需要处理的数和进制、输出转换之后的数字
function baseConverter(decNumber,base){
	// 初始化数据,空栈、栈内数据、下一步处理数、用于显示非二进制的数
	var remStack = new Stack(),
		rem,
		baseString = '',
		digite = '0123456789ABCDEF';
	// 遍历数据
	while(decNumber > 0){
		// 栈内的数据。余数
		rem = Math.floor(decNumber % base);
		remStack.push(rem);
		// 下一次循环需要用的数据
		decName=Math.floor(decNumber / base)
	}
	// 遍历栈内数据
	while(!remStack.isEmpty()){
		// 取数据进行十六进制的转换
		baseString += digite[remStrack.pop()]
	}
	return baseString
}

二、队列

队列是先进先出的原则

// 队列类
function Queue(){
	let items = []
	// 添加数据。添加到队列尾部
	this.enqueue=function(e){
		items.push(e)
	}
	//删除数据。删除队列头部
	this.dequeue=function(){
		items.shift()
	}
	// 返回队列头部
	this.front=function(){
		return items[0]
	}
	// 判断队列是否有值
	this.isEmpty=function(){
		return items.length == 0
	}
	// 返回队列长度
	this.size=function(){
		return items.length
	}
}


// 优先队列,在先进先出的原则上再加上优先级
function PriorityQueue(){
	let items = []
	// 创建一个原型,包含优先级
	function QueueElement(element,priority){
		this.element = element
		this.priority = priority
	}
	// 内置方法
	this.enqueue = function(e,p){
		// 初始化对象
		let queueElement = new QueueElement(e,p)
		// 如果队列为空,则直接添加
		if(this.isEmpty()){
			items.push(queueElement)
		}else{
		// 如果队列不为空,则需要判断优先级
			// 判断是否要添加到队列尾部
			let added = false
			// 遍历队列数据
			if(let i=0;i<items.length;i++){
				// 如果数据的优先级小于现有的数据,则直接添加于该数据后面
				if(queueElement.priority < items[i].priority){
					items.splice(i,0,queueElement)
					added = true
					break
				}
			})
			// 如果数据的优先级大于现有的所有数据,则直接添加到队列尾部
			if(!added){
				items.push(queueElement)
			}
		}
	}
}

// 击鼓传花,即鼓声停,花落谁手谁淘汰
function hotPatato(nameList,num){
	// 初始化队列
	let queue = new Queue()
	// 每个人的名字都添加到队列上去。map如果没有返回值,则会返回所有数据的index的数组
	nameList.map(i => queue.enqueue(nameList[i]))
	// 定义被淘汰的人
	let eliminated = ''
	// 循环队列,直到剩下之后一个数据
	while(queue.size() > 1){
		// 模拟鼓声
		for(let i=0;i<num;i++){
			// 谁在队列的头部则花在谁手。先是删除头部的数据,然后排在队尾,表示花给出去
			queue.enqueue(queue.dequeue())
		}
		// 鼓声停,则淘汰
		eliminated = queue.dequeue()
		console.log(`${eliminated}在击鼓传花游戏中淘汰`)
	}
	return queue.dequeue()
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:27:45  更:2021-08-03 11:28:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 10:25:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码