巧用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 523要在a.com/a.html 中 包含 b.com/b.h ... -
JavaScript 开发的几个经典技巧
2015-03-30 15:54 583JavaScript 开发的45个经典技巧 原文链接 ... -
js 中的算术运算
2015-03-24 17:15 502js 中的算术运算 -
jquery 元素查找同级 父级
2014-11-03 13:47 817遍历节点 $(this).parent() //取到当 ... -
echarts 百度图表
2014-07-30 15:27 859http://echarts.baidu.com/doc/ex ... -
RunJS
2014-05-23 09:19 637http://runjs.cn/code/ih5xzoeb -
layer,一个可以让你想到即可做到的web弹窗(层)解决方案(js组件)
2014-02-20 10:27 607http://sentsin.com/jquery/layer ... -
JQ弹出层插件(tipsWindow 3.1)
2012-11-30 09:40 1036详细的看演示页吧:http://leotheme.cn/wp- ... -
支持幻灯、相册、滚动、TAB选项卡等效果的全能jQuery特效
2012-10-25 16:40 810http://www.5icool.org/a/201202/ ... -
Jquery控制图片宽度及高度 ,做到等比例缩放
2012-08-07 15:11 5481$(document).ready(function() ... -
jQuery万能浮动框插件测试
2012-06-13 13:09 1004jQuery万能浮动框插件测试 http://www. ... -
jquery Validform 表单验证
2012-06-13 12:53 4803Validform常用功能示例 基本功能 给表单元 ... -
表单文本框文字提示 InputDefault Query 插件
2012-06-13 12:38 1113InputDefault 是一个jQuery 插件,用 ... -
推荐10个jquery表单增强插件
2012-06-12 14:31 861推荐10个jquery表单增强插件 发布于2010年0 ... -
百度编辑器 UEditor
2012-06-11 17:31 624http://ueditor.baidu.com -
jQuery选择器大全(48个代码片段+21幅图演示)
2012-06-11 09:15 752jQuery选择器大全(48 ... -
js数组操作大全
2012-06-05 16:36 737js数组操作大全(转) shift:删除原数组第一 ... -
JS EVAL 简密工具
2012-06-05 14:50 775http://jsbeautifier.org/ -
11 个基于 JavaScript 的图表插件推荐
2012-06-01 09:49 89010 个基于 JavaScript 的图表插件 ... -
jquery 项目
2012-05-23 11:25 835jQuery EasyUI http://www.je ...
相关推荐
在JavaScript中实现队列和堆栈的数据结构: 队列是一种先进先出(FIFO)的线性数据结构,它在队列的一端添加元素(入队),在另一端移除元素(出队),最先入队的元素将最先出队。队列的应用非常广泛,如任务调度、...
在JavaScript中,没有原生的堆栈或队列实现,但我们可以使用数组或者通过JavaScript的原型链来简单地模拟这些数据结构的行为。其他编程语言,如C++、Python等,也都提供了对堆栈和队列操作的支持。 此外,堆栈和...
在JavaScript中,堆栈、队列和链表是三种基础且重要的数据结构,它们各有各的特点和用途。 **堆栈(Stack)** 堆栈是一种后进先出(Last In First Out, LIFO)的数据结构,类似于我们日常生活中的叠放物品。在这个...
原理讲解 8-2 循环队列-代码实操 8-3 任务队列-原理讲解 8-4 任务队列-代码实操 第9章 数据结构之“链表”链表是一个有序的线性数据结构,对于它而言排序和循环是最基本的两项技能,这个章节从零是实现链表结构到...
然而,由于JavaScript数组是动态大小的,它在某些情况下(如索引查找)可能不如其他数据结构高效。 2. **链表**:链表是一种线性数据结构,每个节点包含数据和指向下一个节点的引用。在JavaScript中,链表可以用来...
AS3中的主要数据结构包括数组、对象、链表、堆栈、队列、哈希表等。 1. **数组**:AS3中的Array类是最基本的数据结构,用于存储一组有序的元素。可以存储任意类型的值,通过索引访问元素。数组分为动态数组和固定...
可用章节列表01JavaScript快速概览02ECMAScript 和 TypeScript 简介03数组04堆栈05队列和双端队列06链表07套装08字典和哈希09递归10.树木11堆12图表13排序和搜索算法14算法设计和技术15算法复杂度第三版更新使用 ES...
以下是一个使用JavaScript数组实现堆栈功能的简单示例: ```javascript // 初始化一个空数组,作为堆栈 var stack = []; // 压栈操作 stack.push("one"); stack.push("two"); stack.push("three"); // 输出堆栈的...
无论是在算法实现、Web开发还是Node.js应用中,灵活使用数据结构都能使代码更加高效和优雅。通过深入研究"数据结构-javascript-研究",开发者可以提高解决问题的能力,从而在IT行业中脱颖而出。
实现的数据结构。 堆 队列 单链表 双向链表 树 《IT面试》中的问题 堆栈和队列 堆栈与getMin和reverse 带有由另一个堆栈实现的sort的堆栈 狗和猫的队列 河内塔通过递归实现顺序 河内塔与堆栈实现的顺序 获取数组...
用Java语言实现的随机算法和数据结构,只是为了好玩。 探索不同的编码样式,因此文件之间的编码样式可能会有很大差异。 实施的: 数据结构: 单链表 双链表 堆栈-基于阵列的固定容量 堆栈-基于列表 两栈一阵列 ...
使用堆栈数组结构进行排队。 堆栈可以Like Queue ,因此称为Like Queue 。 它具有以与堆栈相同的速度运行的特性。 虽然速度很快,但实际数据不会被删除,因此请注意使用。 安装 npm i like-queue --save 用法 'use...
本文将深入探讨三种基本数据结构——堆栈、队列和链表,并结合JavaScript语言,介绍如何在Node.js环境中应用这些概念。 1. **堆栈**: 堆栈是一种“后进先出”(LIFO,Last In First Out)的数据结构。它的工作...
在编程实践中,理解和掌握队列与堆栈的原理及实现方法对于解决各种算法问题十分关键,它们是许多更复杂数据结构和算法的基础,例如深度优先搜索(DFS)与广度优先搜索(BFS)算法都需要用到堆栈或队列。通过学习和...
JavaScript中的数据结构和算法可视化数据结构和算法 数据结构大批哈希表链表单链表双链表堆使用链表使用数组队列使用链表使用堆栈二进制搜索树(BST) 演算法数组中的TwoPairsSum 反转字符串第一个重复出现的字符...
:JavaScript的动态数组数据结构 双端队列 :snake: :适用于JavaScript的Python的双端队列数据结构 链表 :oden: :JavaScript的双链表数据结构 :red_paper_lantern: :JavaScript的单链列表数据结构 :repeat_button:...