[アルゴリズム(1)]stack


アルゴリズムシリーズの1つ目は「Stack」!
Stackの簡単な説明は、遊園地に並んで、最後に来た人が最初に来た人より先に入場するアルゴリズムだと理解しています.常識じゃないの?より簡単に言えば、普段よく使うctrl + zのショートカットキーを取り消すことを考えてみてください.処理中に現在の書き込みを削除した場合は、対応するショートカットキーを押すと、現在の書き込みがすぐに表示されます.最初に書いたテーマではありません!
1.Stackの性格
  • 後で保存するデータの構造を先に表示する👉 L I F O
  • LIFO:Last In First Out(最後のデータの観点)
  • またはFILO:First in Last Out(最初に入力したデータから)
  • 2.Stackの使い方
  • を直ちに入れる、逆ソートのデータを取り出して書き込む場合、
  • .
    3.Stackがサポートする方法
    (1)pop():最後に入力したデータのインポートと削除
    (2)push():元のスタックの上部に新しいデータを追加する
    (3)peek():最後のデータを教える
    (4)isEmpty():スタックにデータがあるかどうかを確認する
    ここでひとつ疑問がありますでは、最後のデータを除いて、他のデータ要素は見えませんか?
    正解は正しい.Stackは、データの追加、削除、および最後に入力されたデータのみを表示できます.残りの要素をチェックまたは変更する機能はありません.理解できないかもしれませんが、これ以外にもアルゴリズムがゆっくり見られるので、このような資料構造形式もあれば大丈夫です!
    4.Stackの実装方法
    (1)一次元アレイ
  • の利点:
  • の実装が容易である
    欠点
  • :追加する要素の数を予め決定して、対応するサイズの配列
  • を生成する必要がある.
    (2)リスト
  • の利点:1次元アレイよりもダイナミックであるため、ストレージの容量は
  • に制限されない.
  • 欠点:
  • の実施が困難である
    5.stack実習
    JAVAでStackを実施します.
    (一般的には、コードが簡単なPythonでアルゴリズムテストを大量に行いますが、JAVAを学びJAVAとして実現します)
    まず、Stackを実装するクラスを作成しますか?
    import java.util.EmptyStackException;
    
    //(1) stack class 만들기
    class Stack<T> {
    	
    	//(2) 같은 type을 받는 노드를 생성
    	class Node<T>{
    		
    		//(3) 데이터 생성
    		private T data;
    		
    		//(4) 다음 노드 생성
    		private Node<T> next;
    		
    		//(5) 생성자 생성 : 해당 타입의 데이터를 하나 받아서 
    		public Node(T data) {
    			//(6) 내부 변수에 저장
    			this.data = data;
    		}
    	}
    	
    	//(7) 멤버 변수 만들기
    	private Node<T>  top;
    	
    	//(8) 함수 구현 
    	
    	//(8-1) pop() : 맨 위에 있는 노드를 가져오는 함수 
    	public T pop() {
    		
    		//만약에 맨 위에 있는 노드가 null이면 exception 처리 
    		if(top == null) {
    			throw new EmptyStackException();
    		}
    		
    		//맨 위에 있는 데이터를 반환하기 전, 
         	        //맨 위 바로 아래에 있는 데이터를 top으로 만들어야 하기 때문에 
    		//그 데이터의 주소를 가져오자! 
    		
    		//데이터 백업
    		T item =  top.data;
    		
    		//top의 다음 요소를 top으로 만듦
    		top = top.next;
    		
    		//데이터 반환
    		return item;
    	}
    	
    	//(8-2) push() : 데이터를 추가하는 함수 
    	public void push(T item) {
    		
    		//push할 T type의 item을 받아서 그 item으로 새 노드 생성
    		Node<T> t = new Node<T>(item);
    		
    		//top앞에 해당 노드를 위치시킴
    		t.next = top;
    		
    		//이제 그 노드가 top이 됨
    		top = t;
    	}
    	
    	//(8-3) peek() : T type의 데이터를 반환하는 함수
    	public T peek() {
    		
    		//만약에 맨 위에 있는 노드가 null이면 exception 처리 
    		if(top == null) {
    			throw new EmptyStackException();
    		}
    		
    		//null이 아니면 현재 top이 가지고 있는 데이터를 반환
    		return top.data;
    	}
    	
    	//(8-4) isEmpty() : 요소가 비어있는지 확인
    	public boolean isEmpty() {
    		return top == null ;
    	}
    }
    
    内容が役に立つことを望みます!
    後で、Stackでアルゴリズムの問題を解決する記事もアップロードします.
    お世話になりました😊
    リファレンス映像