数组是一种非常简单的存储数据序列的数据结构。平时开发中,要存储多个元素,数组是最常用的数据结构。但是,在大多数语言中,数组的大小是固定的。从数组的起点或中间插入或移除项的成本非常高,因为需要频繁地移动元素。
链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每一个元素由一个存储元素本身的节点和一个指向下一个元素的引用(称为指针或链接)组成。
相对于数组,链表添加或者移除元素的时候不需要移动其他元素。但是缺点是要访问元素,链表必须从头开始寻找。
现实生活中,寻宝游戏就是典型的链表。有一条线索(即head),然后一直往下顺着链表去下一个地点。直到到达链尾。还有火车也是链表。
接下来实现我们的链表结构吧!链表的方法:
append(element): 向列表尾部添加一个新的项。
insert(position , element): 向列表的特定位置插入一个新的项。
remove(element): 从列表中删除一项。
indexOf(element): 返回元素在列表中的索引。如果列表中没有该项则返回-1。
removeAt(position): 从列表的特定位置移除一项
isEmpty(): 如果链表中不包含任何元素,返回true,链表长度大于0则返回false。
size(): 返回链表包含的元素个数。
toString(): 由于列表项使用了Node类,就需要重写继承自Javascript对象默认的toString方法,让其输出元素的值。
结构实现:
//链表
function LinkedList(){
var Node = function(element){
//元素结构
this.element = element;
this.next = null;
}
var length = 0; //存储列表项的数量的length属性
var head = null; //存储第一个节点的引用
this.append = function(element){
var node = new Node(element),
current;
if(head === null){ //链表为空