巧用javascript数组实现数据结构-堆栈与队列
huangdijia 发表于 2011-7-23 分类
前几天,有一位朋友问起我,Javascript如何实现堆栈和队列。我想了想,JavaScript里貌似只有数组,没有堆栈和队列这两种类型,于是我想是否可以利用JavaScript里的数组模拟实现这两种数据类型,答案是肯定的,因为在其他一些编程语言(如PHP)里也没有这两种类型,但它们同样是利用数组来实现。
简单的利用javascript的数组实现数据结构中的堆栈和队列。
Stack.js源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
/* * @brief: 定义堆栈类
* @remark: 实现堆栈基本功能
*/
function Stack(){
//存储元素数组
var aElement = new Array();
/*
* @brief: 元素入栈
* @param: 入栈元素列表
* @return: 堆栈元素个数
* @remark: 1.Push方法参数可以多个
* 2.参数为空时返回-1
*/
Stack.prototype.Push = function (vElement){
if (arguments.length == 0)
return - 1;
//元素入栈
for ( var i = 0; i < arguments.length; i++){
aElement.push(arguments[i]);
}
return aElement.length;
}
/*
* @brief: 元素出栈
* @return: vElement
* @remark: 当堆栈元素为空时,返回null
*/
Stack.prototype.Pop = function (){
if (aElement.length == 0)
return null ;
else
return aElement.pop();
}
/*
* @brief: 获取堆栈元素个数
* @return: 元素个数
*/
Stack.prototype.GetSize = function (){
return aElement.length;
}
/*
* @brief: 返回栈顶元素值
* @return: vElement
* @remark: 若堆栈为空则返回null
*/
Stack.prototype.GetTop = function (){
if (aElement.length == 0)
return null ;
else
return aElement[aElement.length - 1];
}
/*
* @brief: 将堆栈置空
*/
Stack.prototype.MakeEmpty = function (){
aElement.length = 0;
}
/*
* @brief: 判断堆栈是否为空
* @return: 堆栈为空返回true,否则返回false
*/
Stack.prototype.IsEmpty = function (){
if (aElement.length == 0)
return true ;
else
return false ;
}
/*
* @brief: 将堆栈元素转化为字符串
* @return: 堆栈元素字符串
*/
Stack.prototype.toString = function (){
var sResult = (aElement.reverse()).toString();
aElement.reverse()
return sResult;
}
} |
Queue.js源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/* * @brief: 定义队列类
* @remark:实现队列基本功能
*/
function Queue(){
//存储元素数组
var aElement = new Array();
/*
* @brief: 元素入队
* @param: vElement元素列表
* @return: 返回当前队列元素个数
* @remark: 1.EnQueue方法参数可以多个
* 2.参数为空时返回-1
*/
Queue.prototype.EnQueue = function (vElement){
if (arguments.length == 0)
return - 1;
//元素入队
for ( var i = 0; i < arguments.length; i++){
aElement.push(arguments[i]);
}
return aElement.length;
}
/*
* @brief: 元素出队
* @return: vElement
* @remark: 当队列元素为空时,返回null
*/
Queue.prototype.DeQueue = function (){
if (aElement.length == 0)
return null ;
else
return aElement.shift();
}
/*
* @brief: 获取队列元素个数
* @return: 元素个数
*/
Queue.prototype.GetSize = function (){
return aElement.length;
}
/*
* @brief: 返回队头素值
* @return: vElement
* @remark: 若队列为空则返回null
*/
Queue.prototype.GetHead = function (){
if (aElement.length == 0)
return null ;
else
return aElement[0];
}
/*
* @brief: 返回队尾素值
* @return: vElement
* @remark: 若队列为空则返回null
*/
Queue.prototype.GetEnd = function (){
if (aElement.length == 0)
return null ;
else
return aElement[aElement.length - 1];
}
/*
* @brief: 将队列置空
*/
Queue.prototype.MakeEmpty = function (){
aElement.length = 0;
}
/*
* @brief: 判断队列是否为空
* @return: 队列为空返回true,否则返回false
*/
Queue.prototype.IsEmpty = function (){
if (aElement.length == 0)
return true ;
else
return false ;
}
/*
* @brief: 将队列元素转化为字符串
* @return: 队列元素字符串
*/
Queue.prototype.toString = function (){
var sResult = (aElement.reverse()).toString();
aElement.reverse()
return sResult;
}
} |
测试:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
var oStack = new Stack();
oStack.Push( "abc" , "123" , 890);
console.log(oStack.toString()); oStack.Push( "qq" );
console.log(oStack.toString()); // alert(oStack.GetSize()); // alert(oStack.Pop()); // alert(oStack.GetTop()); // oStack.MakeEmpty(); // alert(oStack.GetSize()); // alert(oStack.toString()); delete oStack;
var oQueue = new Queue();
oQueue.EnQueue( "bbs" , "fans" , "bruce" );
console.log(oQueue.toString()); oQueue.EnQueue(23423); console.log(oQueue.toString()); // alert(oQueue.DeQueue()); // alert(oQueue.GetSize()); // alert(oQueue.GetHead()); // alert(oQueue.GetEnd()); // oQueue.MakeEmpty(); // alert(oQueue.IsEmpty()); // alert(oQueue.toString()); delete oQueue;
|
发表评论
-
iframe 跨站自适应高度
2015-04-03 16:07 488要在a.com/a.html 中 包含 b.com/b.h ... -
JavaScript 开发的几个经典技巧
2015-03-30 15:54 551JavaScript 开发的45个经典技巧 原文链接 ... -
js 中的算术运算
2015-03-24 17:15 469js 中的算术运算 -
jquery 元素查找同级 父级
2014-11-03 13:47 788遍历节点 $(this).parent() //取到当 ... -
echarts 百度图表
2014-07-30 15:27 815http://echarts.baidu.com/doc/ex ... -
RunJS
2014-05-23 09:19 598http://runjs.cn/code/ih5xzoeb -
layer,一个可以让你想到即可做到的web弹窗(层)解决方案(js组件)
2014-02-20 10:27 562http://sentsin.com/jquery/layer ... -
JQ弹出层插件(tipsWindow 3.1)
2012-11-30 09:40 998详细的看演示页吧:http://leotheme.cn/wp- ... -
支持幻灯、相册、滚动、TAB选项卡等效果的全能jQuery特效
2012-10-25 16:40 785http://www.5icool.org/a/201202/ ... -
Jquery控制图片宽度及高度 ,做到等比例缩放
2012-08-07 15:11 5450$(document).ready(function() ... -
jQuery万能浮动框插件测试
2012-06-13 13:09 971jQuery万能浮动框插件测试 http://www. ... -
jquery Validform 表单验证
2012-06-13 12:53 4770Validform常用功能示例 基本功能 给表单元 ... -
表单文本框文字提示 InputDefault Query 插件
2012-06-13 12:38 1075InputDefault 是一个jQuery 插件,用 ... -
推荐10个jquery表单增强插件
2012-06-12 14:31 824推荐10个jquery表单增强插件 发布于2010年0 ... -
百度编辑器 UEditor
2012-06-11 17:31 592http://ueditor.baidu.com -
jQuery选择器大全(48个代码片段+21幅图演示)
2012-06-11 09:15 718jQuery选择器大全(48 ... -
js数组操作大全
2012-06-05 16:36 702js数组操作大全(转) shift:删除原数组第一 ... -
JS EVAL 简密工具
2012-06-05 14:50 737http://jsbeautifier.org/ -
11 个基于 JavaScript 的图表插件推荐
2012-06-01 09:49 84910 个基于 JavaScript 的图表插件 ... -
jquery 项目
2012-05-23 11:25 799jQuery EasyUI http://www.je ...
相关推荐
主要介绍了JavaScript数组实现数据结构中的队列与堆栈的相关资料,需要的朋友可以参考下
原理讲解 8-2 循环队列-代码实操 8-3 任务队列-原理讲解 8-4 任务队列-代码实操 第9章 数据结构之“链表”链表是一个有序的线性数据结构,对于它而言排序和循环是最基本的两项技能,这个章节从零是实现链表结构到...
实现的数据结构。 堆 队列 单链表 双向链表 树 《IT面试》中的问题 堆栈和队列 堆栈与getMin和reverse 带有由另一个堆栈实现的sort的堆栈 狗和猫的队列 河内塔通过递归实现顺序 河内塔与堆栈实现的顺序 获取数组...
用Java语言实现的随机算法和数据结构,只是为了好玩。 探索不同的编码样式,因此文件之间的编码样式可能会有很大差异。 实施的: 数据结构: 单链表 双链表 堆栈-基于阵列的固定容量 堆栈-基于列表 两栈一阵列 ...
使用堆栈数组结构进行排队。 堆栈可以Like Queue ,因此称为Like Queue 。 它具有以与堆栈相同的速度运行的特性。 虽然速度很快,但实际数据不会被删除,因此请注意使用。 安装 npm i like-queue --save 用法 'use...
JavaScript中的数据结构和算法可视化数据结构和算法 数据结构大批哈希表链表单链表双链表堆使用链表使用数组队列使用链表使用堆栈二进制搜索树(BST) 演算法数组中的TwoPairsSum 反转字符串第一个重复出现的字符...
:JavaScript的动态数组数据结构 双端队列 :snake: :适用于JavaScript的Python的双端队列数据结构 链表 :oden: :JavaScript的双链表数据结构 :red_paper_lantern: :JavaScript的单链列表数据结构 :repeat_button:...
JavaScript 算法与数据结构 中高级前端」窥探数据结构的世界- ES6 版 刷题训练指南 从头开始复习算法之让你彻底搞清楚 BFS 和 DFS vscode-leetcode 算法学习笔记 JavaScript 实现的算法和数据结构 数据结构和算法必...
DS和算法数据结构-数组-堆栈-队列-链表-树-尝试-图-哈希表算法-排序-动态编程-BFS + DFS-递归数据结构的操作-插入-删除-遍历(已处理)-搜索-排序-访问
我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构。由于javascript的解释器针对数组都做了直接的优化,不会存在在很多编程语言中数组固定长度的问题...
数据结构 演算法 领导原则 说明您的背景以及为什么自己适合(在这里插入公司)。 二叉树 二叉搜索树 如何以不同的顺序遍历二叉树。 如何将BFS和DFS应用于二进制树。 如何从给定的数组构造树: 图/树(问题的46...
在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍.
:exploding_head: 数据结构与算法 一堆解决方案中的常见问题(面试内容)。 用ES6编写 :fire: ,经Jest测试 :magnifying_glass_tilted_left: 还有一些 :stopwatch: 性能测量 运行测试 yarn && yarn test 数据结构 ...
数据结构和算法与 JavaScript,Ch。 第 10 页:339 深度优先搜索 数据结构和算法与 JavaScript,Ch。 第 10 页:339 二分查找 数据结构和算法与 JavaScript,Ch。 10 & 13 二分查找 归并排序 数据结构和算法与 ...
在此处查找数据结构--> 您可以在我的博客中按标签或名称搜索问题--> 用法 克隆 repo git clone https://github.com/mrinalini-m/algorithms.git 测试个别问题:例如,运行node leetcode/array_string/...
第321题Javascript 面试问题 集.js 实现 Set 及其功能 地图.js 实现 Map 及其功能 堆栈.js 实现 Stack 及其功能 队列.js 实现Queue及其功能 链表.js 实现链表及其功能 程序.js 此文件包含有助于更好地理解语言语法的...
优先级队列是一种抽象队列类型,类似于常规队列或堆栈数据结构,但是其中每个项目都具有与其关联的priority 。 在优先级队列中,优先级高的项先于优先级低的项。 为了提高性能,Prioqueue优先级队列使用数组实现的二...
6.3.3 模拟堆栈和队列操作的方法 6.3.4 使用splice()方法添加和删除数组元素 6.3.5 修改length属性更改数组 6.3.6 调用Array对象的方法生成字符串 6.3.7 连接两个数组 6.3.8 常见属性和方法汇总 6.4 Date对象 6.4.1 ...
6.3.3 模拟堆栈和队列操作的方法 6.3.4 使用splice()方法添加和删除数组元素 6.3.5 修改length属性更改数组 6.3.6 调用Array对象的方法生成字符串 6.3.7 连接两个数组 6.3.8 常见属性和方法汇总 6.4 Date对象 6.4.1 ...