要儲存多個元素,陣列可能是最常用的資料結構。這種資料結構非常方便,但是有乙個缺點:從陣列的起點或者中間插入或移除項的成本非常高,因為需要移動元素(比如你插入乙個元素後面的所有的元素都移動了「位置」)。
相比於陣列來說,鍊錶的好處在於新增或者刪除元素的時候不需要移動其他元素。但是操作鍊錶需要使用指標。陣列的乙個優點是可以直接訪問任何位置的任何元素,但是要是想訪問鍊錶中的某一元素,則是必須從起點開始迭代直到找到目標元素。
建立乙個鍊錶
function linkedlist()
//各種方法
}
node表示要加入列表的項,它包含乙個element屬性以及乙個next屬性,element表示要新增到列表的值,next表示指向列表下乙個節點項的指標。
當乙個node元素被建立時,它的next指標總是null
列表為空,新增的是第乙個元素。列表不為空,向其追加元素。
要迴圈訪問列表中的所有元素,就需要有乙個起點,就是head
var node = new node(element), //傳入值建立node項
current;
if(head === null) else
//使當前最後一項的指標指向node
current.next = node;
}length++; //更新列表長度
};
var list = new linkedlist();
輸入位置,從特定位置移除乙個元素
this.removeat = function(position) else在任意位置插入乙個元素previous.next = current.next;
}length --;
return current.element;
} else
}
this.insert = function (position, element) else
node.next = current; // node的下乙個為current
previous.next = node; // node的上乙個位置為previous
}length++;
return true;
} else
}
把linkedlist物件轉換成乙個字串。
this.tostring = function()
return string; //返回字串
}
返回元素的位置
this.indexof = function(element)
index ++;
current = current.next;
}return -1; //找不到返回-1
}
輸入元素,移除該元素
this.remove = function(element)
判斷是否為空 得到長度 得到第乙個元素
this.isempty = function ()
this.size = function ()
this.gethead = function ()
雙向列表提供了兩種迭代列表的方法:從頭到尾迭代,或者反過來。
function doublylinkedlist() ;
var length = 0;
var head = null;
var tail = null; //對列表最後一項的引用
//各種方法
}
this.insert = function(position, element) else
} else if(position === length) else
node.next = current;
previous.next = node;
current.prev = node;
node.prev = previous;
}length ++; //更新列表長度
return true;
} else
}
this.removeat = function(position) else
} else if(position === length -1) else
current.next.prev = previous;
}length --;
return current.element;
} else
}
我對單向鍊錶的學習
本文章主要是記述我對單向鍊錶的理解 1.有頭節點和無頭結點鍊錶的理解 2.有頭結點鍊錶的建立 顯示,插入,刪除,氣泡排序,逆置。我對鍊錶的理解就是將乙個個結構體串聯起來。乙個個結構體在乙個鍊錶中就是乙個節點,節點之間是由結構體指標聯絡起來的,也就是他們結構體中會包含乙個同型別的 next指標,用來指...
我對JS佇列的學習
佇列是遵循fifo 先進先出 原則的一組有序的項。佇列在尾部新增新元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾。在具體應用中通常用鍊錶或者陣列來實現。佇列的操作其實是和棧是差不多的,但是佇列只允許新資料在後端進行新增。1 建立佇列 宣告乙個類 function queue 需要乙個用於儲...
js實現對鍊錶的操作
關於對鍊錶這種資料結構,原來在c語言中有提到過,鍊錶一種長度可變的動態列表。分為單向列表和雙向列表。定義乙個幾點型別建構函式 function node v function arraylist 在第no個節點後面新增乙個新節點 this insertat function no,v else no...