TIL 34データ構造とアルゴリズム-データ構造


資料の構造やアルゴリズムを勉強していないので、大学時代に勉強したことを忘れ始めました.だから私はもう一度彼に注意して、ついでに復習します.javaには内蔵された資料の構造方法がたくさんあるのを覚えていますが、先端開発者になることを決意し、勉強しながら、javaScriptにあるものもないものも嫌いで、何かを無視しました.まず、javaに埋め込む方法でタイプを理解し、javascriptでよく使われるものを使用しますか?これらをもっと詳しく処理します.

Stack

LIFO(Last In, First Out)FILO(First In, Last Out)構造.まず入力したデータが最後に出力される仕組みになっているので、箱に何を入れて削除するかの順番を考えてください.

挿入そうにゅう:push push
削除さくじょ:pop pop
読み込みよみとり:peek peek
const stack = [];
stack.push('a');
stack.push('b');
stack.push('c');

console.log(stack); // [a, b, c]

let peek = stack[stack.length - 1];
console.log(peek); // c

stack.pop();
console.log(stack); // [a, b]

Queue

FIFO(First In, First Out)LILO(Last In, Last Out)構造.これは,一端(後)では挿入のみ,他端(前)では削除のみを行う構成である.簡単に言えば、最初に挿入されるのは最初に流出する構造です.

Enqueue:データの挿入
dequeue:データ出力
const queue = [];

queue.push('a'); //enqueue
queue.push('b'); //enqueue
console.log(queue); // [a, b]

queue.shift(); //dequeue 'a'
console.log(queue); // [b]
queue.shift(); //dequeue 'b'

リンクリスト


複数のノードが一方向を指す構造.最初のノードをhad、最後のノードをtailと呼びます.
function linkedList(val) {
  this.val = val;
  this.next = null;
}

let head = new linkedList(0);
let node1 = new linkedList(1);
let node2 = new linkedList(2);
let tail = new linkedList(3);

haed.next = node1;
node1.next = node2;
node2.next = tail;

ダブルリンクリスト(Double Linked List)


接続ツリーが一方向接続の場合、二重接続リスト
ノードが接続されています.ノードは、自分の前のノードと次のノードを覚えています.
前のノード(preference)と次のノード(next)から構成されます.双方向接続なので、ノードをブラウズするときに両側に接続できます.
前のノードを指定するには、変数をもう1つ使用する必要があります.メモリの使用量は増加しますが、利点が大きいため、現実的にはほとんどがデュアル接続リストを使用しています.
function doubleLinkedList(val){
  this.val = val;
  this.next = null;
  this.prev = null;
}

let head = new doubleLinkedList(0);
let node1 = new doubleLinkedList(1);
let node2 = new doubleLinkedList(2);
let tail = new doubleLinkedList(3);

head.next = node1;
node1.next = node2;
node2.next = tail;

tail.prev = node2;
node2.prev = node1;
node1.prev = head;

Map

MapはJavaScriptのオブジェクトと似ていますが、少し違います.Mapでは、鍵に複数のデータ型を使用できます.オブジェクトはキーワードを文字に変換します.しかし、Mapはタイプを変えず、そのままです.O(1)의 시간복잡도を持ち、時間の複雑さを減らすのに役立ちます.
  • 鍵は重複できません.
  • KeyとValueのうち1つだけが存在しません.
  • Valueは繰り返し可能です.
  • let map = new Map();
    map.set('1', 'string');
    map.set(1, 'number');
    map.set(true, 'boolean');
    
    for (let types of map.keys()) {
      console.log(typeof types);
      // string
      // number
      // boolean
    }
    
    console.log(map.size); // 3

    Set


    Setは重複しない値のセットです.key値は0からindexの順で、重複する値をフィルタします.
    let set = new Set();
    
    set.add("son");
    set.add("kwak");
    set.add("chi");
    set.add("son");
    set.add("chi");
    
    console.log(set)
    // {0: 'son' 1: 'kwak' 2: 'chi'}
    
    set.has('son') // set 내에 값이 있으면 true, 없으면 false 반환
    set.size; // set에 있는 값의 갯수
    set.clear(); // set을 비운다.