TIL(37)データ構造(Stack,Queue)1.


データ構造/アルゴリズム🏻

データ構造📌

  • は、複数のデータセット
  • を格納および使用する方法を定義する.
  • データを効率的に処理する方法を収集し、資料構造と命名する.
  • は代表的に4つの資料構造に分けられる.
  • スタック、キュー、ツリー、グラフィック
  • 特定の場合の問題を解決し、
  • を特化する.
  • の大量の資料構造を理解し、いかなる状況に遭遇したときに適切な資料構造を迅速かつ正確に適用して問題を解決することができる.
  • 資料構造はアレイである.
  • ▼▼データ:文字、数字、音声、画像、ビデオなどの実生活を構成するすべての値
    さらに、データは、名前、年齢、鍵セットアドレス、または遺伝子DNAに分類することもできる.
    しかし、データ自体が情報を持つことは難しいため、これらの情報を分析、整理、利用してこそ、データに意味がある.
    データを目的別に区分、分類し、必要に応じて特徴を把握、分析、整理、利用する.

    スタック📍

  • 、積み上げ、折りたたむなどの意味があります.積み重ね皿に類似する資料構造
  • データ(データ)のデータ構造
  • 機能は限られた
  • であり、入力と出力は一方向である.
    データ構造ポリシー:第1入出力(LIFO)、第1入出力(FILO)
  • のデータを先に入力するのが一番遅いです.
  • Stackの実際の使用例
  • ブラウザで後退し、
  • に進むことができます.
    Stackの基本コード
    class Stack {
      constructor() {
        this.storage = {};
        this.top = 0; // 스택의 가장 상단을 가리키는 포인터 변수를 초기화 합니다.
      }
    
      size() {
        return this.top;
      }
    
    // 스택에 데이터를 추가 할 수 있어야 합니다.
      push(element) {
        this.storage[this.top] = element;
        this.top += 1;
      }
    	
    // 가장 나중에 추가된 데이터가 가장 먼저 추출되어야 합니다.
      pop() {
        // 빈 스택에 pop 연산을 적용해도 에러가 발생하지 않아야 합니다
        if (this.size() <= 0) {
          return;
        }
    
        const result = this.storage[this.top-1];
        delete this.storage[this.top-1];
        this.top -= 1;
        
        return result;
      }
    }

    キュー(キュー)📍


    列に並んで待つ
  • Stackこれとは反対
  • データの送受信に際しては、各機器間に存在する速度差や時間差を克服するために、Queueを一時メモリとして用いたデータ構造を総称してバッファと呼ぶ.
  • データ構造ポリシー:最初の出力(FIFO)、最初の出力(LILO)
    最初に入力したデータは
  • です.
  • Queueの実際の使用例

  • コンピュータに接続されたプリンタ
  • 一般的にプリンタの速度が遅い.
  • CPUはプリンタよりもデータの処理速度が速い
  • これにより、CPUは、印刷に必要なデータをすばやく作成し、印刷ジョブキューに格納し、他の操作を実行することができる.
  • プリンタは、印刷ジョブキューにおいてデータを受信し、一定の速度で印刷する.

  • YouTubeなどのビデオストリームアプリケーションでビデオを視聴する場合、ダウンロードしたデータがビデオを再生するのに不足する可能性があります.このとき、正常にビデオを再生するために、ビデオをキューに入れ、ビデオを再生するのに十分なデータがある場合に、ビデオを生成する.
  • Queueの基本コード
    class Queue {
      constructor() {
        this.storage = {};
        this.front = 0;
        this.rear = 0;
      }
    
      size() {
        return this.rear - this.front;
      }
    	
    // 큐에 데이터를 추가 할 수 있어야 합니다.
      enqueue(element) {
        this.storage[this.rear] = element;
        this.rear += 1;
      }
    	
    // 가장 먼저 추가된 데이터가 가장 먼저 추출되어야 합니다.
      dequeue() {
        // 빈 큐에 dequeue 연산을 적용해도 에러가 발생하지 않아야 합니다
        if (this.size() === 0) {
          return;
        }
    
        const result = this.storage[this.front];
        delete this.storage[this.front];
        this.front += 1;
    
        return result;
      }
    }