巧用javascript数组实现数据结构-堆栈与队列

简单的利用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;

时间: 2024-10-14 11:19:52

巧用javascript数组实现数据结构-堆栈与队列的相关文章

数据结构-堆栈和队列最简单的实现(Python实现)

OK,上篇博客我们介绍了双向链表以及代码实现,这篇文章我们来学习堆栈和队列. 队.栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样.五花八门的变形和实现方式.但不管他们形式上怎么变,队和栈都有其不变的最基本的特征,我们今天就从最基本,最简单的实现来看看队列和堆栈. 不管什么形式的队列,它总有的一个共同的特点就是"先进先出".怎么理解呢?就像是超市排队结账,先排队的人排在队的前面,先结账出队.这是队列的特征. 而堆栈则和队列相反,它是"先进后出",

使用JavaScript的数组实现数据结构中的队列与堆栈

今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出! 如下图所示: 1.2.堆栈的基本概念 堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出! 如下图所示: 二. 在JavaScript中实现队列和堆栈 在JavaScript中实现队列和数组主要是通过数组,js数组中提供了以下几个方法可以让我们很方便实现队列和堆栈: sh

JavaScript学习总结(二十一)——使用JavaScript的数组实现数据结构中的队列与堆栈

今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出! 如下图所示: 1.2.堆栈的基本概念 堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出! 如下图所示: 二. 在JavaScript中实现队列和堆栈 在JavaScript中实现队列和数组主要是通过数组,js数组中提供了以下几个方法可以让我们很方便实现队列和堆栈: sh

你所不知道的JavaScript数组

你所不知道的JavaScript数组 相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们往常看到的 Array,而是 ArrayBuffer. 我写的很多东西都是因为要完成某些特定的功能而刻意总结的,可以算是备忘,本文也是如此!前段时间一直在研究 Web Audio API 以及语音通信相关的知识,内容侧重于音频流在 AudioContext 各个

JavaScript数组操作详情

Array 数组概述 Array 类型是 ECMAScript 最常用的类型.javaScript 中的 Array 类型和其他语言中的数组有着很大的区别. 虽然数组都是有序排列,但 javaScript中的数组每个元素可以保存任何类型. javaScript 中数组的大小也是可以调整的. 创建数组的两种方式 new 运算符创建数组 var box1 = new Array(); //创建了一个数组,数组属于object类型 var box2 = new Array(10); //创建一个包含

JavaScript数组知识网络

JavaScript数据类型 基本数据类型 Boolean Null Number String Symbol Undefined 对象数据类型Object Build-in object Array Date RegExp more... Array 定义:JavaScript数组是内置的对象之一,它可以用一个变量来存储多个同种类型或不同类型的值. 构造方法 var newArr = new Array(values); var newArr = [values]; 判断是否数组 Array.

深入浅出 JavaScript 数组 v0.5

本文来自:http://www.cnblogs.com/googny/p/3747832.html 有一段时间不更新博客了,今天分享给大家的是一篇关于JS数组的,数组其实比较简单,但是用法非常灵活,在工作学习中应该多学,多用,这样才能领会数组的真谛. 以下知识主要参考<JS 精粹>和<JavaScript 高级程序设计>. 数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.JavaScript 没有像此类数组一样的数据结构. 它提供了一些类数组特性的对象,它把数组的下标

php的数组与数据结构

php编程中30%的地方会用到数组,可见php数组的重要性. php中的数组数组概述--- php是弱类型语言,故数组可存放任意多个,任意类型的数据,且可实现堆,栈,队列等数据结构的功能.数组容量可根据元素个数自动调整. 分类      索引数组---下标是整数,类似大多数语言中的数组.      关联数组---下标是无序不重复的key,映射到对应的value. (一)数组的定义1.直接赋值的方式声明数组    在变量名后面通过方括号“[]”中使用数字声明索引数组,使用字符串声明关联数组.   

第七章:Javascript数组

数组是值的有序结合.每个值叫做一个元素,而每个元素在数组中都有一个位置,用数字表示,称为索引. javascript数组是无类型的:数组的元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型.数组的元素可能是对象或其他数组,这允许创建更加复杂的数据结构,如对象的数组和数组的数组. javascript数组的索引是基本零的32位数值:第一个元素的索引为0,最大的索引为4 294 967 294(2的32次方-2),数组最大能容纳4 294 967 295个元素. javascript数