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. ... 
随机推荐
- 搜狗2013年校园招聘研发类笔试试卷之C/C++类
			今天无聊在网上搜了下今年各大NB IT公司的笔试题,搜到了搜狗的,只有扫描版的试卷没有电子版也没有答案,就拿来做了做,题目非常多,涉及到C/C++.Java.数据结构.Android.IOS.Java ... 
- 读>>>>白帽子讲Web安全<<<<摘要→我推荐的一本书→1
			<白帽子讲Web安全>吴翰清著 刚开始看这本书就被这本书吸引,感觉挺不错,给大家推荐下,最近读这本书,感觉不错的精华就记录下, 俗话说>>>好脑袋不如一个烂笔头< ... 
- 使用Fabric进行crash收集统计
			主要是帮助自己记一下地址. 1 申请Crashlytics服务:http://try.crashlytics.com 2 下载Fabric客户端,帮助集成Crashlytics到自己的项目中:http ... 
- Linux中常用的查看系统信息的命令
			导读 Linux是一个神奇而又高效的操作系统,学完Linux对Linux系统有一个熟悉的了解后,你需要了解下这些实用的查看系统信息的命令. 查看系统版本命令 uname 谈到系统版本就一定会想到una ... 
- java获得当前文件路径
			第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ... 
- 国内常用NTP服务器地址及IP
			iptables实现80端口转发到8080端口上 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 ... 
- Shell脚本中cd命令使用
			在写shell脚本的时候发现cd切换目录的时候无法切换,代码是下面的. #!/bin/bash #changedir.sh history cd /home/firefox sleep pwd 我仔细 ... 
- 如何在Linux上实现文件系统的自动检查和修复?
			Linux文件系统有可能在各种各样的情况下受到损坏,比如系统崩溃.突然断电.磁盘断开,或者文件节点 (i-node)不小心被覆盖等等,因此需要定期检查文件系统,而说到检查和修复Linux文件系统,fs ... 
- 【GoLang】GoLang fmt 占位符详解
			golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ... 
- Remove Nth Node From End of List
			Given a linked list, remove the nth node from the end of list and return its head. Notice The minimu ... 
