개발소설

[자료구조] Stack 본문

CS/자료구조

[자료구조] Stack

ChaeHing 2023. 3. 16. 23:53

Stack

  • 데이터를 순서대로 쌓는 자료구조
  • 후입 선출 구조 이다. - LIFO(Last In First Out), FILO(First In Last Out) 
    • 가장 먼저 입력한 데이터가 가장 마지막의 출력이 된다.
  • 데이터의 입출력 방향이 같다.
  • 데이터를 하나씩 입력하고 하나씩 빼야 한다. - 여러개의 데이터를 동시에 처리 할 수 없다.
  • 현실에서 프링글스통을 생각하면 된다. - 포장시 가장 먼저 넣었던 과자를 가장 마지막에 뺀다.
  • 스택에 데이터를 입력하는 것을 PUSH, 데이터를 꺼내는것을 POP이라고 한다.

JAVA에서 Stack

  • 자바에서 클래스로 제공한다.
import java.util.*;

// stack 생성
Stack<String> stack = new Stack<>();

// stack 입력
stack.push("first data");
stack.push("second data");
stack.push("third data");

System.out.println("----------------------");
System.out.println("stack 입력후");
System.out.println(stack);

 // stack 삭제, 마지막에 입력한 데이터가 삭제 된다.
 stack.pop();
 System.out.println("----------------------");
 System.out.println("stack 삭제후");
 System.out.println(stack);
 System.out.println("마지막에 입력한 데이터가 삭제 된다.");

 // 가장상단값 출력, 마지막에 넣은 데이터
 System.out.println("----------------------");
 System.out.println("가장 상단값");
 System.out.println(stack.peek());

// stack (크기)사이즈 출력
System.out.println("----------------------");
System.out.println("stack 사이즈");
System.out.println(stack.size());

// stack이 비어있는지 체크 boolean 타입
System.out.println("----------------------");
System.out.println("stack이 비어 있나요?");
System.out.println(stack.isEmpty());

// stack내 해당 데이터가 있는지 체크
System.out.println("----------------------");
System.out.println("해당 데이터가 stack 안에 있나요?");
System.out.println(stack.contains("second data"));

// stack 비우기 -> 전부삭제
System.out.println("----------------------");
System.out.println("stack 비우기 이후");
stack.clear(); // 전부 삭제
System.out.println(stack); // 스택 출력
System.out.println(stack.isEmpty()); // 스택이 비어있는지 체크


/*
stack 입력후
[first data, second data, third data]
----------------------
stack 삭제후
[first data, second data]
마지막에 입력한 데이터가 삭제 된다.
----------------------
가장 상단값
second data
----------------------
stack 사이즈
2
----------------------
stack이 비어 있나요?
false
----------------------
해당 데이터가 stack 안에 있나요?
true
----------------------
stack 비우기 이후
[]
true

*/

JAVA로 Stack 구현

import java.util.*;

public class StackEX { 
  
  // ArrayList로 구현
  private ArrayList<Integer> listStack = new ArrayList<Integer>();

  // 데이터 입력
  public void push(Integer data) {
    listStack.add(data);
  }
  
  // 데이터 출력
  public Integer pop() {
     if(listStack.size() == 0) {
      return null;
    }else {
      return listStack.remove(listStack.size()-1);
    }
  }

  // 데이터 사이즈 반환
  public int size() {
     return listStack.size();
  }
  
  // 가장 상단 데이터, 마지막에 입력한 데이터 반환
  public Integer peek() {
     if(listStack.size() == 0) {
      return null;
    }else {
      return listStack.get(listStack.size()-1);
    }
  }

  // 스택을 문자열(String)으로 반환
  public String show() {
    return listStack.toString();
  }
  public void clear() { listStack.clear(); }
}

 

 

'CS > 자료구조' 카테고리의 다른 글

[자료구조] 그래프 탐색 BFS / DFS  (0) 2023.03.20
[자료구조] BST(Binary Search Tree)  (0) 2023.03.20
[자료구조] Graph  (0) 2023.03.20
[자료구조] Tree  (0) 2023.03.19
[자료구조] Queue  (0) 2023.03.17
Comments