Stack

kangking·2024년 6월 7일
1

DataStructure

목록 보기
1/6

자료구조

데이터들을 저장할 때 특정 구조에 맞춰서 효율적으로 저장하는 것

스택

후입선출('LIFO')방식으로 가장 최근에 들어온 데이터가 가장 먼저 나가는 자료구조

스택의 특징

  • 삽입 삭제 연산이 한쪽에서만 진행됨

스택의 구현

  1. 배열을 이용해서 숫자를 여러개 저장할 수 있게 변수 생성
  1. 배열에 직접 접근할 수 없게 만들기 위해 private을 사용하고 메소드를 통해 구현
  1. 숫자를 어디까지 저장했는지 가리키는 최상단 지시 인덱스인 top변수 생성
  1. top변수를 조정하며 top에 해당하는 배열 인덱스에 값 저장 및 변경

스택의 메소드

  • isEmpty

    스택이 비어있는지 확인하는 메소드

    스택이 비어있다면

    스택이 비어있음을 출력

     public Boolean isEmpty(){
          return (top == -1 ? true : false);
      }
  • isFull

    스택이 가득찼는지 확인하는 메소드

    스택이 가득찼다면

    스택이 가득찼음을 출력

        public Boolean isFull(){
          return (top == stack.length-1 ? true : false);
      }
  • peek

    스택 최상단 값을 반환하는 메소드

    스택이 비어있지 않다면

    최상단 값을 반환

        public Integer peek(){
         	 if (top == -1){
          	    return -1;
        	  }
          	return stack[top];
    	  }
  • push

    데이터를 저장하는 메소드

    저장할 데이터를 전달 받고

    스택이 가득차 있지 않으면

    top을 1 증가하고 배열의 해당 인덱스 번호에 값을 저장

        public void push(Integer data){
            if (top >= -1 && top < stack.length-1){
                top++;
                stack[top] = data;
            }
        }
  • pop

    데이터를 삭제하는 메소드

    스택이 비어있지 않으면(조건)

    top 인덱스 번호의 배열에 값을 꺼내고(삭제)

    top을 1감소

      public Integer pop(){
          if (top < 0){
              System.out.println("빈스택");
              return -1;
          }else {
              return stack[top--];
          }
      }
  • display(새로 만들어본 메소드)

    내부 데이터를 양식에 따라 출력하는 메소드

    배열을 순회하며

    top 이하 인덱스 값은 그대로 출력

    top 초과 인덱스 값은 null출력

      for (int i = 0; i < stack.length; i++) {
            if (i <= top){
                System.out.printf("[ %d ]",stack[i]);
            }else {
                System.out.printf("[ null ]");
            }
        }
        System.out.println();
    }

스택의 활용

  • 웹 브라우저 방문기록(뒤로가기)
  • 실행 취소(undo) (되돌리기기능)
  • 역순 문자열 만들기
  • 후위 표기법 계산
profile
하루하루 의미있게

0개의 댓글