靜態(tài)鏈表是用數(shù)組來實現(xiàn)鏈表的基本操作渤昌,對于沒有引用功能和指針功能的語言寿烟,是不錯的選擇澈驼,下面的程序?qū)崿F(xiàn)了以下的功能
- 讀取
- 插入
- 刪除
var list_max_size = 10;
//靜態(tài)鏈表基本元素
function Compontent(data,cur) {
this.data = data;//數(shù)據(jù)
this.cur = cur;//游標
}
//獲得一個初始化的靜態(tài)鏈表
function initList() {
for(var i=0;i<list_max_size-1;i++){
list[i] = new Compontent(null,i+1);
}
//數(shù)組的最后一位要存放第一個元素的下標
//數(shù)組的第一個元素存放備用鏈表的第一個節(jié)點的下表
list[list_max_size-1] = new Compontent(null,0);
}
//申請新元素
//若備用鏈表非空,返回分配的結(jié)點下標韧衣,否則返回0
function mallocSll() {
var i = list[0].cur;
if(i){
list[0].cur = list[i].cur;
}
return i;
}
//插入
function insertList(i,data) {
var j,k;
k = list_max_size-1;
if(i<1||i>list.length+1){
return 1;
}
j = mallocSll(list);
if(j){
list[j].data = data;
//獲取i位置前面的元素
for(var l=1;l<=i-1;l++){
k = list[k].cur;
}
list[j].cur = list[k].cur
list[k].cur = j;
return 0;
}
return 1;
}
//刪除第i個元素
function deleteComponent(i){
if(i<1||i>list.length){
return 1;
}
k = list_max_size-1;
for (var j = 1; j <=i-1; j++) {
k = list[k].cur;
}
j = list[k].cur;
list[k].cur = list[j].cur;
list[j].cur = list[0].cur;
list[j].data = null;
list[0].cur = j;
}
//讀取鏈表
function readList(){
var l = 0;
var string = '';
do{
l = list[l].cur;
if(list[l].data!=null){
string += list[l].data;
}
}
while(l!=0);
return string;
}
var list = new Array(list_max_size);
initList();
console.info(JSON.stringify(list));
insertList(1,1);
console.info('建立第一個元素\n'+JSON.stringify(list));
console.info('建立第一個元素:'+readList());
insertList(1,2);
console.info('在第一個元素前面插入一個數(shù)據(jù)\n'+JSON.stringify(list));
console.info('在第一個元素前面插入一個數(shù)據(jù):'+readList());
insertList(2,3);
console.info('在第二個元素前面插入一個數(shù)據(jù)\n'+JSON.stringify(list));
console.info('在第二個元素前面插入一個數(shù)據(jù):'+readList());
deleteComponent(2);
console.info('刪除第二個元素\n'+JSON.stringify(list));
console.info('刪除第二個元素:'+readList());
打印到控制臺的結(jié)果
[{"data":null,"cur":1},{"data":null,"cur":2},{"data":null,"cur":3},{"data":null,"cur":4},{"data":null,"cur":5},{"data":null,"cur":6},{"data":null,"cur":7},{"data":null,"cur":8},{"data":null,"cur":9},{"data":null,"cur":0}]
建立第一個元素
[{"data":null,"cur":2},{"data":1,"cur":0},{"data":null,"cur":3},{"data":null,"cur":4},{"data":null,"cur":5},{"data":null,"cur":6},{"data":null,"cur":7},{"data":null,"cur":8},{"data":null,"cur":9},{"data":null,"cur":1}]
建立第一個元素:1
在第一個元素前面插入一個數(shù)據(jù)
[{"data":null,"cur":3},{"data":1,"cur":0},{"data":2,"cur":1},{"data":null,"cur":4},{"data":null,"cur":5},{"data":null,"cur":6},{"data":null,"cur":7},{"data":null,"cur":8},{"data":null,"cur":9},{"data":null,"cur":2}]
在第一個元素前面插入一個數(shù)據(jù):21
在第二個元素前面插入一個數(shù)據(jù)
[{"data":null,"cur":4},{"data":1,"cur":0},{"data":2,"cur":3},{"data":3,"cur":1},{"data":null,"cur":5},{"data":null,"cur":6},{"data":null,"cur":7},{"data":null,"cur":8},{"data":null,"cur":9},{"data":null,"cur":2}]
在第二個元素前面插入一個數(shù)據(jù):231
刪除第二個元素
[{"data":null,"cur":3},{"data":1,"cur":0},{"data":2,"cur":1},{"data":null,"cur":4},{"data":null,"cur":5},{"data":null,"cur":6},{"data":null,"cur":7},{"data":null,"cur":8},{"data":null,"cur":9},{"data":null,"cur":2}]
刪除第二個元素:21
[Finished in 0.2s]