標籤:list header 添加元素 console app ble += tostring 作者
作者原文:http://hawkzz.com/blog/blog/1514966479779
簡介
最近,在看《資料結構與演算法 Javascript描述》,本篇文章,只是看書的筆記,算是重複造輪子;覺得有用的可以看看,覺得無用的,勿噴;
定義
列表是一組有序的資料,每個列表中的資料項目稱為元素,在Javascript中,列表中的元素可以是任意資料類型。不包含任何元素的列表稱為空白列表。
列表的抽象資料類型定義
| 抽象資料類型 |
定義 |
| listSize(屬性) |
列表的元素個數 |
| pos(屬性) |
列表的當前位置 |
| length(屬性) |
返回列表中的元素個數 |
| clear(方法) |
清空列表中的所有元素 |
| toString(方法) |
返回列表的字串形式 |
| getElement(方法) |
返回當前位置的元素 |
| insert(方法) |
在現有的元素後插入新元素 |
| append(方法) |
在列表的末尾添加新元素 |
| remove(方法) |
從列表中刪除元素 |
| find(方法) |
從列表中尋找元素的位置 |
| front(方法) |
將列表的當前位置移到第一個元素 |
| end(方法) |
將列表的當前位置移到最後一個元素 |
| prev(方法) |
將當前位置前移一位 |
| next(方法) |
將當前位置後移一位 |
| currPos(方法) |
返回列表的當前位置 |
| moveTo(方法) |
將當前位置移到到指定位置 |
| contains(方法) |
從列表中尋找元素是否存在 |
列表類的實現
1、建立List類
定義List建構函式,根據定義的列表抽象資料類型,建立一個List類
function List() { this.dataList = []; this.listSize = 0; this.pos = 0; this.len = length; this.clear = clear; this.toString = toString; this.getEle = getEle; this.insert = insert; this.append = append; this.remove = remove; this.find = find; this.front = front; this.end = end; this.prev = prev; this.next = next; this.currPos = currPos; this.moveTo = moveTo; this.contains = contains}
2、給列表添加元素:append
function append(ele) { //添加元素 this.listStze += 1; this.dataList[this.listSize - 1] = ele;}
該方法往列表裡添加元素,先將列表擴容,然後添加元素;
3、查詢列表元素的位置:find
function find(ele){ for(var i = 0; i < this.listSize; i++ ){ if(ele === this.dataList[i]){ return i; } } return -1;}
該方法尋找元素的位置,如果找到就返回該元素的位置,否則就返回-1;
4、刪除列表元素:remove
function remove(ele) { //刪除元素 var index = this.find(ele); if (index > -1) { this.dataList.splice(index, 1); this.listSize -= 1; return true; } return false;}
該方法刪除列表元素,首先通過find()方法查詢是否存在該元素,如果存在這擷取其下標,通過splice()刪除該元素;並且列表長度減1;
5、查詢元素是否存在:contains
function contains(ele){ var index = this.find(ele); if (index > -1) { return true; } return false;}
6、插入元素:insert
function insert(ele, after) { //插入元素 var index = this.find(after); if (index > -1) { this.dataList.splice(index + 1, 0, ele); this.listSize += 1; }else{ this.append(ele); }}
改方法實現往某個元素後面插入一個元素,首先使用find()方法查詢在列表中是否存在after元素,如果存在就在after元素後面,插入ele元素;如果不存在,就在列表最後面插入;
7、查詢列表長度:length
function length() { //列表長度 return this.listSize;}
8、清空列表:clear
function clear() { //清空列表 delete this.dataList; this.dataList = []; this.pos = 0; return true;}
該方法清空列表,首先刪除舊的列表,然後建立新的列表,指標重設為0;
9、擷取當前位置的元素;getEle;
function getEle() { return this.dataList[this.pos];}
10、設定當前位置為開頭:front
function front() { //設定當前位置是0 this.pos = 0;}
11、設定當前位置是最後一個元素的位置:end
function end() { this.pos = this.listSize - 1;}
12、設定指標向前移一位:prev
function prev() { if (this.pos > 0) { this.pos -= 1; } else { this.front(); }}
13、設定指標向後移一位:next
function next() { //設定當前位置向後移動 if (this.pos < this.listSize - 1) { this.pos += 1; } else { this.pos = this.end(); }}
14、擷取當前指標的位置:currPos
function currPos() { //返回當前位置 return this.pos;}
12、移動當指定位置:moveTo
function moveTo(position) { //移動當指定位置 if (position >= 0 && position <= this.listSize - 1) { this.pos = position; return true; } return false;}
13、列表迴圈
首先,建立列表;
var list = new List();
然後,向列表匯入資料
var arr = ['a','b','c','d','e'];for(var i = 0;i < arr.length ; i ++){ list.append(arr[i]);}
接著,迴圈列表
for(list.front;list.currPos < list.length(); list.next()){ console.log(list.getEle());}
或者
for(list.end();list.currPos >= 0 ; list.prev()){ console.log(list.getEle());}
Javascript實現列表結構