JavaScript數(shù)據(jù)結(jié)構(gòu)鏈表知識詳解
最近在看《javascript數(shù)據(jù)結(jié)構(gòu)和算法》這本書,補一下數(shù)據(jù)結(jié)構(gòu)和算法部分的知識,覺得自己這塊是短板。
鏈表:存儲有序的元素集合,但不同于數(shù)組,鏈表中的元素在內(nèi)存中不是連續(xù)放置的。每個元素由一個存儲元素本身的節(jié)點和一個指向下一個元素的引用(也稱指針或鏈接)組成。
好處:可以添加或移除任意項,它會按需擴容,且不需要移動其他元素。
與數(shù)組的區(qū)別:
數(shù)組:可以直接訪問任何位置的任何元素;
鏈表:想要訪問鏈表中的一個元素,需要從起點(表頭)開始迭代列表直到找到所需的元素。
做點小筆記。
function LinkedList(){
var Node = function(element){
this.element = element
this.next = null
}
var length = 0
var head = null
this.append = function(element){
var node = new Node(element)
var current
if(head == null){ //鏈表為空
head = node
}else{ //鏈表不為空
current = head
//循環(huán)鏈表,直到最后一項
while(current.next){
current = current.next
}
current.next = node
}
length ++ //更新鏈表長度
}
this.insert = function(position,element){
var node = new Node(element)
var current = head
var previous
var index = 0
if(position>=1 && position<=length){ //判斷是否越界
if(position === 0){ //插入首部
node.next = current
head = node
}else{
while(index++ < position){
previous = current
current = current.next
}
node.next = current
previous.next = node
}
length ++ //更新鏈表長度
return true
}else{
return false
}
}
this.indexOf = function(element){
var current = head
var index = -1
while(current){
if (element === current.element) {
return index
}
index++
current = current.next
}
return -1
}
this.removeAt = function(position){
if(position>-1 && position<length){ //判斷是否越界
var current = head
var previous
var index = 0
if(position === 0){ //移除第一個元素
head = current.next
}else{
while(index++ < position){
previous = current
current = current.next
}
previous.next = current.next //移除元素
}
length -- //更新長度
return current.element
}else{
return null
}
}
this.remove = function(element){
var index = this.indexOf(element)
return this.removeAt(index)
}
this.isEmpty = function(){
return length == 0
}
this.size = function(){
return length
}
this.toString = function(){
var current = head
var string = ""
while(current){
string = "," + current.element
current = current.next
}
return string.slice(1)
}
this.getHead = function(){
return head
}
}
以上所述是小編給大家介紹的JavaScript數(shù)據(jù)結(jié)構(gòu)鏈表知識詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表
- JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表和雙向循環(huán)鏈表的實現(xiàn)
- JavaScript數(shù)據(jù)結(jié)構(gòu)之單鏈表和循環(huán)鏈表
- JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法示例
- 使用JavaScript實現(xiàn)鏈表的數(shù)據(jù)結(jié)構(gòu)的代碼
- JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表的實現(xiàn)
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之鏈表
- JavaScript實現(xiàn)的鏈表數(shù)據(jù)結(jié)構(gòu)實例
- JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表各種操作詳解
相關(guān)文章
微信小程序scroll-view實現(xiàn)自定義滾動條
這篇文章主要為大家詳細介紹了微信小程序scroll-view實現(xiàn)自定義滾動條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06
js監(jiān)聽鍵盤事件的方法_原生和jquery的區(qū)別詳解
下面小編就為大家?guī)硪黄猨s監(jiān)聽鍵盤事件的方法_原生和jquery的區(qū)別詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
Javascript延遲執(zhí)行實現(xiàn)方法(setTimeout)
延遲執(zhí)行,其實就是用到了setTimeout這個函數(shù)。善于利用這個函數(shù),可以減少很多ajax的請求,以及dom操作。2010-12-12

