序文: 複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点もあります。
したがって、複数の要素を格納するための別のオプションは、リンク リストです。配列とは異なり、リンク リスト内の要素はメモリ内で連続したスペースである必要はありません。リンク リストの各要素には、要素自体と次の要素への参照を格納するノードがあります。
リンク リストには、配列に比べていくつかの欠点があります。
1. 単方向リンクリストとは何かでは、単方向リンクリストとは一体何でしょうか? これは電車のようなもので、機関車はノードに接続され、ノードには乗客がいて、このノードは次のノードに接続され、以下に示すように続きます。 リンクリストの構造は次のとおりです。 直感的なリンク リストを理解したので、単一リンク リストのコードをカプセル化してみましょう。 2. 単方向リンクリストのカプセル化まず、リンク リスト構造を表す 以下のように表示されます。 関数LinkedList(){ this.length = 0; this.head = null; //内部クラス関数 Node(data){ this.data = データ; this.next = null; } } 3. 単連結リストの一般的な操作次に、単一リンクリストのよく使用される操作を追加します。主なものは次のとおりです。
次に、それらを1つずつ実装します。 1. append(element) メソッド-----リストの末尾に項目を追加するリンク リストの末尾にデータを追加する場合、次の 2 つの状況が考えられます。
したがって、判断する必要があります。リンク リストが空の場合は、ヘッド ノードのポインタを新しいノードに直接ポイントします。 LinkedList.prototype.append = function(data){ var newNode = 新しいノード(データ); // リンクリストが空かどうかを判定します // 1. 空の場合 if (this.length === 0) { ノードを新規作成します。 }それ以外{ //空ではありません var current = this.head; if(現在.次){ 現在の = 現在の.次; } 現在のノードの次。 } this.length += 1; } 2. toStringメソッド ----- 要素の値を出力するこれは比較的簡単です。主なことは、各要素を取得することです。リンク リストの要素を取得するには、最初のノードから開始する必要があるため、先頭ノードから開始し、各ノードをループして、その中の LinkedList.prototype.toString = 関数(){ var 現在の = this.head; var ListStr = ''; while(現在){ ListStr += 現在のデータ + ' '; 現在の = 現在の.次; } ListStr を返します。 } 検証: いくつかの新しいノードを作成し、印刷します var list = 新しい LinkedList(); リストに追加します('a'); リストに追加します('b'); リストに追加します('c'); リストに追加します('d'); リストに追加します('e'); アラート(リスト); 印刷結果は次のとおりです。 3. 挿入メソッド ----- リスト内の特定の位置に項目を挿入する任意の位置にデータを挿入する方法を実装するには、まず挿入位置が範囲外かどうかを判断し、範囲外ではない場合を 2 つのケースに分けます。最初の位置に挿入された場合は、新しく追加されたノードがヘッドであることを意味します。その後、元のヘッド ノードを新しいノードの次のノードとして使用し、ヘッドが新しいノードを指すようにします。他の位置に挿入する場合は、まずループを介してノードの位置を見つけ、ループ中に前のノードと次のノードを保存する必要があります。正しい位置を見つけた後、新しいノードの コードは次のとおりです。 LinkedList.prototype.insert = function(位置,データ){ if(位置<0 || 位置 >this.length){ false を返します。 } var newNode = 新しいノード(データ); var インデックス = 0; if(位置 == 0){ Node.next = this.head; ノードを新規作成します。 }それ以外{ while(インデックス++ < 位置){ var 現在の = this.head; var 前 = null; 前 = 現在; 現在の = 現在の.次; } 現在のノードを次に示します。 previous.next = 新しいノード; } this.length += 1; true を返します。 } 検証: 最初の位置に xl を挿入し、2 番目の位置に wh を挿入します。 リストを挿入(1,'xl') リストを挿入(2,'wh') アラート(リスト) 4. 取得メソッド-----対応する位置の要素を取得するこの方法は比較的単純です。まず、 LinkedList.prototype.get = function(位置,データ){ var 現在の = this.head; var インデックス = 0; if(位置 < 0 || 位置 >= this.length){ null を返します。 }それ以外{ while(インデックス<位置){ 現在の = 現在の.次; インデックス++; } 現在のデータを返します。 } } 検証: 3 番目の位置にある要素を取得します。 アラート(リスト.get(3)); 5. indexOf() メソッド ----- リスト内の要素のインデックスを返しますまず、検索対象の要素の位置が存在するかどうかを判断します。存在しない場合は -1 を返します。存在する場合、2 つのケースがあります。返された要素が最初の位置にある場合、最初の位置のインデックスが直接返されます。返された要素が別の位置にある場合は、最初にループを介してノードの位置を見つける必要があります。このプロセス中、インデックスはトラバーサルの数だけ増加する必要があります。正しい要素の位置を見つけた後、印刷されたインデックスがターゲットの位置になります。 LinkedList.prototype.indexOf = function(data){ var インデックス = 0; var 現在の = this.head; while(現在){ 現在のデータ == データの場合 インデックスを返します。 } それ以外{ 現在の = 現在の.次; インデックス++; } } -1 を返します。 } } 検証: c のインデックスを取得します。 アラート(リストのインデックス('c')); 6. 更新方法-----特定の位置にある要素を変更するこのメソッドは get メソッドと非常によく似ています。後方にトラバースします。index LinkedList.prototype.update = function(position,ele){ if(位置<0 || 位置>=this.length){ false を返します。 }それ以外{ var インデックス = 0; var 現在の = this.head; while(インデックス++ <位置){ 現在の = 現在の.次; } 現在のデータ = ele; true を返します。 } } 検証: 位置0の要素をbearに変更します リストを更新(0,'クマ') アラート(リスト) 7. removeAt メソッド-----リストの指定された位置から項目を削除しますまず、削除された項目の位置が範囲外かどうかを判断します。範囲外ではない場合は、 LinkedList.prototype.removeAt = function(位置,データ){ var 現在の = this.head; var 前 = null; var インデックス = 0; if(位置<0 || 位置>=this.length){ false を返します。 }それ以外{ while(インデックス++ <位置){ 前 = 現在; 現在の = 現在の.次; } 前の.次の = 現在の.次の; this.length -= 1; true を返します。 } } } 検証: 3 番目の位置にある要素を削除します。 リスト.削除(3) アラート(リスト) 8. Removeメソッド - リストから項目を削除するまず、削除する要素がリンク リスト内にあるかどうかを判断します。ない場合は、 LinkedList.prototype.remove = function(ele){ var 現在の = this.head; var 前 = null; var インデックス = 0; while(current.data !== ele){ 前 = 現在; 現在の = 現在の.次; インデックス++; } 前の.次の = 現在の.次の; } 検証: 値が xl の要素を削除します。 リストを削除します('xl') アラート(リスト) 9. isEmpty メソッド-----リンクリストが空かどうかを判定する
LinkedList.prototype.isEmpty = 関数(){ this.length == 0 を返します。 } 確認する: アラート(リストが空です()) 9. Sizeメソッド ----- リンクリストに含まれる要素の数を返します直接返される要素の LinkedList.prototype.size = 関数(){ this.length を返します。 } 確認する: アラート(リスト.サイズ()) これで、JavaScript による単一リンクリスト プロセス解析の実装に関するこの記事は終了です。JavaScript による単一リンクリスト コンテンツの実装に関する関連情報については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS3は、Transformを使用して動く2D時計を作成します。
1: mysql公式サイトからダウンロードhttps://dev.mysql.com/downlo...
1. リテラルとローカル変数へのアクセスは最も高速ですが、配列要素とオブジェクト メンバーへのアクセ...
目次Nginx は 2 つの socket.io サーバーをプロキシします。 socket.ioの動...
イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...
新しく作成された Web サイトの場合は、ASP.NET MVC5 を例に挙げます。セッションを処理...
1 システムのインストール手順OSバージョン:1804イメージのダウンロード: http://cd...
この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...
この記事の例では、カルーセルのフレームレート再生を実現するためのVueの具体的なコードを参考までに共...
この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...
Vue でprovide+inject組み合わせを使用するまず、App.vue を変更する必要があ...
目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...
外部結合の構文は次のとおりです。フィールド名を選択FROM テーブル名 1 LEFT|RIGHT|F...
HTTP ステータス コードステータス コードは 3 桁の数字と理由フレーズ (最も一般的なもの: ...
目次複数テーブル結合の基本構文クロス結合と直積現象クロスコネクトデカルト積現象内部結合外部結合左外部...
序文これは古くからの要望ですが、オンラインで解決策を探している人はまだ多く、特に検索結果の上位にラン...