はじめに:日常生活では、人々はしばしばリストを使用します。たとえば、私たちが行く前に購入したいものをすべて購入するために、私たちが買い物に行く必要がある場合があるとき、それは私たちが使用する必要があるもののリストです。または、私たちが若いときに学校にいたとき、各試験の後、学校はこの試験のトップ10の生徒のランキングとトランスクリプトをリストします。これらはすべてリストのリストです。また、コンピューターのリストを使用しているため、リストはどこで使用に適していますか?使用には適していないのはどこですか?
使用に適しています:リストに多くの要素がない場合、リスト内の要素を検索またはソートするときに効率が非常に高いため、リストを使用できます。それどころか、リストに多くの要素がある場合、リストの使用には適していません。
1:リストの抽象データ型定義
リストの抽象データ型を設計するには、リストに属する属性、リストで実行する操作など、リストの定義を提供する必要があります。
リストは、順序付けられたデータセットです。各リストのデータ項目は要素と呼ばれます。 JavaScriptでは、リスト内の要素は任意のデータ型を使用できます。リストに保存できる要素の数に関する事前の合意はありません。ただし、実際に使用すると、要素の数はプログラムメモリによって制限されます。
次に、リストを設計したいと考えています。その後、リストの実装について考えることができます。それらにはどのような属性と方法が含まれるべきですか?もちろん、以下の私のデザインは、本「JavaScriptデータ構造とアルゴリズム」のデモに基づいて設計されています。そのため、将来プログラムを作成するときに、独自の抽象クラスを参照として設計する方法を学ぶことができます。本の中でデモについて学ぶ最も重要なことは、彼らのデザインのアイデアとコードの書き方を学ぶことです。それらには次の属性があります。
1。listsize(プロパティ):リストサイズ変数を使用して、リスト内の要素の数を保存します。
2。POS(プロパティ):リストの現在の位置、要素のインデックス。
3。DataStore(プロパティ):空の配列を初期化して、要素の数を保存します。特定のリストに要素を取得したい場合は、上記のPOS属性を使用できます。 DataStore [POS]など。
すべての方法。次のリストについて説明し、1つずつ導入されません。
2:リストクラスを実装する方法
上記で定義されたリストの抽象データ型に基づいて、コンストラクター +プロトタイプパターンを介して次のように、次のリストクラスを実装できます。
コードコピーは次のとおりです。
function list(){
//リスト内の要素の数
this.listsize = 0;
//リストの現在の位置は何ですか
this.pos = 0;
//空の配列を初期化して、リスト要素を保存します
this.datastore = [];
}
list.prototype = {
//リストの最後に要素を追加する
追加:function(element){
var self = this;
self.datastore [this.listsize ++] = element;
}、
//リストから要素を削除します
削除:function(element){
var self = this;
var curindex = self.find(element);
if(curindex> -1){
self.datastore.splice(curindex、1);
-self.listsize;
trueを返します。
}
falseを返します。
}、
//リスト内の要素を見つけてインデックスを返す
検索:function(element){
var self = this;
for(var i = 0、datalen = self.datastore.length; i <datalen; i ++){
if(self.datastore [i] ==要素){
私を返します。
}
}
return -1;
}、
//リスト内の要素の数を返します
長さ:function(){
これを返します。
}、
//リスト内の要素を表示します
toString:function(){
this.datastoreを返します。
}、
/*
*指定された要素の後に要素を挿入します
* @param要素現在の要素
* @param elementafterこの要素の背後にある現在の要素を挿入します
*/
挿入:function(element、elementafter){
var self = this;
var insertpos = self.find(letentyafter);
if(insertpos> -1){
self.datastore.splice(insertpos+1,0、element);
++ self.listsize;
trueを返します。
}
falseを返します。
}、
//リスト内のすべての要素をクリアします
clear:function(){
this.datastoreを削除します。
this.datastore = [];
this.listsize = this.pos = 0;
}、
//指定された要素がリストにあるかどうかを判断します
contains:function(element){
var self = this;
for(var i = 0、ilen = self.datastore.length; i <ilen; i ++){
if(self.datastore [i] ==要素){
trueを返します。
}
}
falseを返します。
}、
//リスト内の現在の要素を最初の位置に移動します
フロント:function(){
this.pos = 0;
}、
//リスト内の現在の要素を最後の位置に移動します
終了:function(){
this.pos = this.listsize -1;
}、
//現在の位置を1つずつ移動します
prev:function(){
if(this.pos> 0){
-this.pos;
}
}、
//現在の位置を1つずつ移動します
次:function(){
if(this.pos <this.listsize -1){
++ this.pos;
}
}、
//リストの現在の場所に戻ります
curpos:function(){
this.posを返します。
}、
//現在の位置を指定された位置に移動します
Moveto:function(n){
this.pos = n;
}、
//現在の位置の要素を返します
getElement:function(){
this.datastore [this.pos];
}
};
上記のように:上記のような多くの方法を含むリストクラスを実装します。もちろん、リストクラスの実装を豊かにするために、他の方法を拡張することもできます。最も重要なことは、上記のようにエンコーディング方法を学ぶことです。