文档章节

Javascript - 栈 和 单链表

huangjacky
 huangjacky
发布于 2014/10/12 12:21
字数 264
阅读 8
收藏 0

最近在重温数据结构,于是写了一些代码玩玩,都是很初级的,表喷各位。。。。

function Stack() {
    this.dataStore = [];
    this.top = 0;
}

Stack.prototype = {
    length: function () {
        return this.top;
    }, push: function (element) {
        this.dataStore[this.top++] = element;
        return this.top;
    }, pop: function () {
        return this.dataStore[--this.top];
    }, peek: function () {
        return this.dataStore[this.top - 1];
    }, clear: function () {
        return this.top = 0;
    }
};

var stack = new Stack();
console.log("length:" + stack.length());
stack.push("huangjacky");
stack.push("fiend");
console.log("length:" + stack.length());
while (stack.length() > 0) {
    var s = stack.pop();
    console.log("element:" + s);
}
console.log("length:" + stack.length());

function Node(element) {
    this.element = element;
    this.next = null;
}

function LinkList() {
    this.head = new Node("head");
}
LinkList.prototype = {
    insert: function (element, after) {
        var s = new Node(element);
        if (after == undefined) { //如果没有指定after,那么就直接插入到链表的最前面
            s.next = this.head.next;
            this.head.next = s;
            return true;
        } else {
            var node = this.head;
            while (node != null) {
                if (node.element == after) {
                    s.next = node.next;
                    node.next = s;
                    return true;
                }
                node = node.next;
            }
        }
        return false;
    }, remove: function (element) {
        var node = this.head;
        var preNode = null;
        while (node != null) {
            if (node.element == element) {
                preNode.next = node.next;
                return true;
            }
            preNode = node;
            node = node.next;
        }
        return false;
    }, find: function (element) {
        var node = this.head;
        while (node != null) {
            if (node.element == element) {
                break;
            }
            node = node.next;
        }
        return node;
    }, toString: function () {
        var s = "";
        var node = this.head;
        while (node != null) {
            if (node.next == null) {
                s += node.element;
            } else {
                s += node.element + " --> ";
            }
            node = node.next;
        }
        return s;
    }
};
var l = new LinkList();
l.insert("huangjacky");
l.insert("fiend", "huangjacky");
l.insert("jackyhuang", "fiend");
l.insert("abc");
var s = l.find("huangjacky");
if (s) {
    console.log("next to huangjacky is :" + s.next.element);
}
l.remove("fiend");
console.log("linklist is :" + l.toString());

  

本文转载自:http://www.cnblogs.com/huangjacky/p/4004842.html

共有 人打赏支持
huangjacky
粉丝 5
博文 19
码字总数 0
作品 0
深圳
高级程序员
私信 提问
用js来实现那些数据结构及算法—目录

  首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做《学习JavaScript数据结构和算法》(第二版),人民邮电出版社出版的这本书。github代...

zaking
05/10
0
0
JavaScript数据结构与算法(链表)

去年4,5月份得时候看过Vue得源码。没记错的话其中的Cache类应该就是用链表实现的. 虽然用得不多但是作为数据结构的的重要组成部分,掌握它也是非常有必要的,下面主要以单链表进行说明. 开始...

fiveoneLei
07/13
0
0
11、手把手教 Vue--彻底搞懂 JS 异步编程

PS:转载请注明出处 作者: TigerChain 地址: https://www.jianshu.com/p/876e68fd6a1c 本文出自 TigerChain 简书 手把手教 Vue 系列 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略...

TigerChain
10/18
0
0
JavaScript 的垃圾回收与内存泄露

JavaScript采用垃圾自动回收机制,运行时环境会自动清理不再使用的内存,因此javascript无需像C++等语言一样手动释放无用内存。 在这之前先说一下垃圾回收的两种方式:引用计数与标记清除。 ...

smalldragonluo
2014/06/16
0
0
JavaScript 对引擎、运行时、调用堆栈的概述理解

JavaScript 对引擎、运行时、调用堆栈的概述理解  随着JavaScript越来越流行,越来越多的团队广泛的把JavaScript应用到前端、后台、hybrid 应用、嵌入式等等领域。 这篇文章旨在深入挖掘Jav...

开元中国2015
10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
3
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
4
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
5
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
5
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部