文档章节

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
JavaScript 的垃圾回收与内存泄露

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

smalldragonluo
2014/06/16
0
0
[译] JavaScript 如何工作:对引擎、运行时、调用堆栈的概述

原文地址: https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf PS: 好久没写东西了,最近一直在准备写一个自己的博客,最后一些技术方向已经敲定了,又可...

小烜同学
2017/11/12
0
0
Javascript的事件模型和Promise实现

1. Javascript的运行时模型——事件循环 JS的运行时是个单线程的运行时,它不像其他编程语言,比如C++,Java,C#这些可以进行多线程操作的语言。当它执行一个函数时,它只会一条路走到黑,不...

远方无风
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
51分钟前
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
55分钟前
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
57分钟前
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0
使用xtrabackup完成远程备份

转载收藏,以防丢失 需求 Can I backup remote databases from my local server02-27-2013, 06:17 AMHi, I am using mysqldump so far for taking daily backups of my Production datab......

阿dai
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部