js:数据结构笔记5--链表
数组:
- 其他语言的数组缺陷:添加/删除数组麻烦;
- js数组的缺点:被实现为对象,效率低;
- 如果要实现随机访问,数组还是更好的选择;
链表:
- 结构图:

- 基本代码:
function Node (elem) {
this.elem = elem;
this.next = null;
}
function LList() {
this.head = new Node("head");
this.find = find;
this.insert = insert;
this.findPrevious = findPrevious;
this.remove = remove;
this.display = display;
} function find(item) {
var currNode = this.head;
while(currNode.elem !== item) {
currNode = currNode.next;
}
return currNode;
}
function insert(newElem,item) {
var newNode = new Node(newElem);
var currNode = this.find(item);
newNode.next = currNode.next;
currNode.next = newNode;
}
function display() {
var currNode = this.head;
while(!(currNode.next === null)) {
console.log(currNode.next.elem);
currNode = currNode.next;
}
}
function findPrevious(item) {
var currNode = this.head;
while(!(currNode.next === null) && (currNode.next.elem !== item)) {
currNode = currNode.next;
}
return currNode;
}
function remove(item) {
var prevNode = this.findPrevious(item);
if(!(prevNode.next === null)) {
prevNode.next = prevNode.next.next;
}
}
操作:demo;
双向链表:
- 结构图:

- 基本代码:
function Node(elem) {
this.elem = elem;
this.next = null;
this.previous = null;
}
function LList() {
this.head = new Node("head");
this.find = find;
this.insert = insert;
this.display = display;
this.remove = remove;
this.findLast = findLast;
this.dispReverse = dispReverse;
} function find(item) {
var currNode = this.head;
while(currNode.elem !== item) {
currNode = currNode.next;
}
return currNode;
}
function insert(newElem,item) {
var newNode = new Node(newElem);
var currNode = this.find(item);
newNode.next = currNode.next;
newNode.previous = currNode;
currNode.next = newNode;
}
function display() {
var currNode = this.head;
while(!(currNode.next === null)) {
console.log(currNode.next.elem);
currNode = currNode.next;
}
}
function remove(item) {
var currNode = this.find(item);
if(!(currNode.next === null)) {
currNode.previous.next = currNode.next;
currNode.next.previous = currNode.previous;
currNode.next = null;
currNode.previous = null;
}
}
function findLast() {
var currNode = this.head;
while(!(currNode.next === null)) {
currNode = currNode.next;
}
return currNode;
}
function dispReverse() {
var currNode = this.findLast();
while(!(currNode.previous === null)) {
console.log(currNode.elem);
currNode = currNode.previous;
}
}
操作:demo;
循环链表:
- 结构图:

js:数据结构笔记5--链表的更多相关文章
- JS数据结构第二篇---链表
一.什么是链表 链表是一种链式存储的线性表,是由一组节点组成的集合,每一个节点都存储了下一个节点的地址:指向另一个节点的引用叫链:和数组中的元素内存地址是连续的相比,链表中的所有元素的内存地址不一定是 ...
- js:数据结构笔记12--排序算法(2)
高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...
- js:数据结构笔记9--二叉树
树:以分层的方式存储数据:节点:根节点,子节点,父节点,叶子节点(没有任何子节点的节点):层:根节点开始0层: 二叉树:每个节点子节点不超过两个:查找快(比链表),添加,删除快(比数组): BST:二 ...
- js:数据结构笔记4--队列
队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.deque ...
- js:数据结构笔记3--栈
栈是一种特殊的列表,数据结构为LIFO: 定义: function Stack() { this.dataStore = []; this.top = 0; this.push = push; thi ...
- js:数据结构笔记1---数组
JS中数组: 只是一种特殊的对象,比其他语言中效率低: 属性是用来表示偏移量的索引:在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串 ...
- js:数据结构笔记14--高级算法
动态规划: 递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题: 动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案: function dynFib(n) { ...
- js:数据结构笔记13--检索算法
顺序查找:也称线性查找,暴力查找的一种 基本格式: var nums = []; for(var i = 0; i < 10; ++i) { nums[i] = Math.floor(Math. ...
- js:数据结构笔记11--排序算法(1)
基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this. ...
随机推荐
- jsp 变量和方法的声明 Java程序片 HTML注释 JSP注释
<%!...%> 声明变量和方法 <%!...%>之中的变量为JSP页面的成员变量,当多个线程访问本页面时,多个线程共享此变量. <%@ page contentType ...
- 微信和WeChat的合并月活跃账户数达到7.62亿了
昨日,腾讯公布了截至2016年3月31日未经审核的第一季度综合业绩,其中财报显示微信和WeChat的合并月活跃账户数达到7.62亿,比去年同期增长39%.网络广告业务的收入同比增长73%至2016年第 ...
- hibernate中的session缓存
1.什么是session缓存? 在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 且没有 ...
- Linux大神必备-文本编辑器
导读 我们在 Linux 上不缺乏非常现代化的编辑软件,但是它们都是基于 GUI(图形界面)的编辑软件.正如你所了解的:Linux 真正的魅力在于命令行,当你正在用命令行工作时,你就需要一个可以在控制 ...
- 如何让Ubuntu系统支持WebP图片格式
本文主要向大家介绍如何让 Ubuntu 系统支持查看 WebP 图片格式,以及如何将 WebP 转为 JPEG 或 PNG 图片格式的方法. 什么是WebP图片 Google开发并推出 WebP 图片 ...
- nginx(四)初识nginx日志文件
nginx 日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,通俗的理解就是先用log_format来定 ...
- ubuntu搭建lamp环境
首先安装软件: sudo apt-get install apache2 sudo apt-get install php5 sudo apt-get install mysql-server sud ...
- ubuntu安装到选择位置时闪退
转自:http://tieba.baidu.com/p/3020839207
- 编译安装0bda 8179无线网卡
CentOS下安装USB无线网卡(Obda:8179) 参考:http://blog.163.com/thinki_cao/blog/static/83944875201311593529913/ c ...
- Dom lesson1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...