三五七言
不要讓資料結構成為天花板相關**位址
鍊錶是乙個線性結構,同時也是乙個天然的遞迴結構。鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。
/**
* 基本屬性
* element當前節點的值
* next下乙個節點
* 基本方法
* insert(item, newitem)在item後面插入乙個新元素newitem插入乙個元素,需要將item元素節點的next指向新元素,新元素的next指向item元素的後繼元素。
* remove(pos)從隊頭刪除乙個元素刪除乙個節點時,需要將其前驅節點的next指向其後繼節點即可。
* find(element)查詢值為element的節點位置
* findpre(element)查詢值為element的節點的前乙個節點
* display()顯示整個鍊錶
*/class node
}class linkedlist
/*** 增加節點
* 在item節點之後增加newitem
*/insert(item, newitem)
} //刪除元素
remove(item)
} //查詢item元素的位置
find(item)
return node
} //是否為空表
isempty()
//尋找元素前乙個節點
findpre(item)
return prenode
} //展示鍊錶
display()
return result
}}module.exports = linkedlist
//測試插入方法
// let link = new linkedlist();
// link.insert('head',1);
// link.insert('head',2);
// link.insert(2,3);
// let fresult = link.display();
// console.log(fresult)
// // //測試刪除方法
// link.remove(2);
// link.remove(3);
// let fresult2 = link.display();
// console.log(fresult2)
特徵:每乙個例項會記錄前驅節點和後繼節點,雙向鍊錶比單鏈表增加了反向遍歷的能力,並且由於所查詢節點的屬性中包含了前驅和後繼節點的資訊,故插入節點和刪除節點時使用同乙個搜尋方法即可
/**
*實現乙個雙向鍊錶twowaylinkedlist類。
*/class node
}class twowaylinkedlist
//是否為空表
isempty()
/*** 增加節點
* 在item節點之後增加newitem
*/insert(item, newitem)
itemnode.next = newnode
newnode.pre = itemnode
}} //查詢item元素的位置
find(item)
return node
}//刪除元素
remove(item)
}//展示鍊錶
display()
return result;
}}module.exports = twowaylinkedlist
//測試插入方法
let link = new twowaylinkedlist();
link.insert('head',1);
link.insert('head',2);
link.insert('head',3);
let fresult = link.display();
console.log(fresult)
//測試刪除方法
link.remove(2);
link.remove(3);
let fresult2 = link.display();
console.log(fresult2)
特徵:迴圈鍊錶的特點是尾節點的next指標指向了頭節點
/**
*以linkedlist類為參考基準,實現乙個迴圈鍊錶circularlinkedlist類
迴圈鍊錶的特點是尾節點的next指標指向了頭節點
* */
//節點
class node
}//迴圈鍊錶
class circularlinkedlist
/*** 增加節點
* 在item節點之後增加newitem
*/insert(item, newitem)
//是否為空表
isempty()
//查詢item元素的位置
find(item)
return node;
}//刪除元素
remove(item)
}//尋找元素前乙個節點
findpre(item)
return prenode;
}//展示鍊錶
display()
return result;
}//設定啟用節點
setactive(item) else
}//測試迴圈指向
testcircle()
}return result;
}}module.exports = circularlinkedlist;
//測試插入方法
/*let link = new circularlinkedlist();
link.insert('head',1);
link.insert('head',2);
link.insert('head',3);
//let fresult = link.display();
let fresult = link.testcircle();
console.log(fresult)
//測試刪除方法
link.remove(2);
link.remove(3);
//let fresult2 = link.display();
let fresult2 = link.testcircle();
console.log(fresult2)
*/
傳說在公元1世紀猶太戰爭中,猶太歷史學家弗拉维奧·約瑟夫斯和他的40個同胞被羅馬士兵包圍,猶太士兵決定寧可自殺也不做俘虜,於是商量出乙個自殺方案。他們圍成乙個圈,從乙個人開始,數到第三個人事將第三個人殺死,然後再數,直到殺光所有人,約瑟夫和另乙個人決定不參加這個瘋狂的遊戲,他們快速地計算出兩個位置,站在那裡得以倖存。寫一段將n個人圍成一圈,並且第m個人會被殺掉,計算一圈中哪兩個人最後會存活,使用迴圈鍊錶解決該問題。
/**
* 傳說在公元1世紀猶太戰爭中,猶太歷史學家弗拉维奧·約瑟夫斯和他的40個同胞被羅馬士兵包圍,猶太士兵決定寧可自殺也不做俘虜,於是商量出乙個自殺方案。他們圍成乙個圈,從乙個人開始,數到第三個人事將第三個人殺死,然後再數,直到殺光所有人,約瑟夫和另乙個人決定不參加這個瘋狂的遊戲,他們快速地計算出兩個位置,站在那裡得以倖存。寫一段將n個人圍成一圈,並且第m個人會被殺掉,計算一圈中哪兩個人最後會存貨,使用迴圈鍊錶解決該問題
*/const circularlinkedlist = require('./circularlinkedlist');
let link = new circularlinkedlist();
//裝入1-40個號碼
init();
//開始報數
start();
//初始化
function init()
}function start()
link.activenode = link.activenode.next === link.head ? link.head.next : link.activenode.next;
index++;
}}
Redis資料結構 鍊錶 linkedlist
鍊錶簡介 因為c語言沒有內建鍊錶這種資料結構,所以redis構建了自己的鍊錶實現。列表鍵的底層實現之一就是鍊錶。當乙個列表鍵包含了數量比較多的元素,又或者列表中包含的元素都是比較長的字串時,redis就會使用鍊錶作為列表鍵的底層實現。1 鍊錶實現 鍊錶結點資料結構 雖然使用多個listnode結構就...
Redis資料結構 鍊錶 linkedlist
鍊錶在redis中使用廣,包括列表鍵的事件 客戶端的狀態儲存等都使用了鍊錶。adlist.h listnode結構來表示鍊錶節點 typedef struct listnode listnode 其實也就是我們平常資料結構中的雙向鍊錶節點的定義。adlist.h list結構來表示鍊錶 typede...
Java資料結構詳解(四) LinkedList
返回鍊錶的邏輯大小 transient int size 0 頭部節點 transient nodefirst 尾部節點 transient nodelast 一,無參構造器 public linkedlist 二,有引數的構造器 public linkedlist collection c add...