본문 바로가기
✏️ CS/자료구조 & 알고리즘

[자료구조] 스택(Stack)

by 개발한 너굴씨 2024. 4. 26.
728x90

 

 

 

 

자료구조,  스택(Stack)에 대해 알아보기 


 

 

 

 

 

 

 

 

Stack의 구조와 특징 

 

스택은 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 단방향 형식의 자료 구조입니다. 

 

  • LIFO(Last In First Out) 후입선출 방식을 사용한다. 
  • Bottom은 가장 밑에 있는 요소 또는 인덱스를 의미한다.
  • Top은 가장 위에 있는 요소 또는 인덱스를 의미한다. 
  • Capacity는 스택에 담을 수 있는 데이터의 최대 개수를 의미한다. 
  • Size는 스택에 현재 담겨있는 데이터의 개수를 의미한다. 

 

 

 

Stack의 선언

 

자바에서 스택의 선언은 Stack< > 스택이름 = new Stack<>(); 형태로 선언할 수 있습니다. 

 

//int형으로 선언 
Stack<Integer> stackInt = new Stack<>();

//Str형으로 선언
Stack<String> stackStr = new Stack<>();

//bool형으로 선언
Stack<boolean> stackBool = new Stack<>();

 

 

 

 

 

 

Stack의 활용

 

스택은 출력 순서가 입력 순서의 역순으로 이루어질 때 사용되는 자료구조입니다.

주로 함수 호출, 괄호 검사, 수식 계산 등으로 활용됩니다. 

 

  • 재귀 알고리즘을 사용하는 경우 
  • 수식을 계산할 때 후위 표기법을 이용하는 경우 
  • 웹 브라우저 방문기록 
  • 되돌리기(undo) 기능

 

 

 

 

Stack의 연산

1. pop()

 

스택에서 가장 나중에 들어온 항목을 제거한다. 

 

2. push(data)

 

data 하나를 스택의 가장 윗 부분에 추가한다.

 

3. peek()

 

스택의 가장 나중에 들어온 항목을 반환한다. 

 

4. isEmpty()

 

스택이 비어있을 때 true 값을 반환한다. 

 

5. isFull()

 

스택이 꽉 차 있을 때 true 값을 반환한다. 

 

6. size()

 

스택의 크기를 출력한다. 

 

 

//push 연산으로 값 추가
stackInt.push(1);
stackInt.push(3);
stackInt.push(5);

//pop 연산으로 값 제거
stackInt.pop();
stackInt.pop();
stackInt.pop();
//5-3-1 순서로 제거됨

stackInt.push(2);
stackInt.push(4);
stackInt.push(8);

//peek 연산으로 마지막 요소를 반환 
System.out.println(stackInt.peek());

//isEmpty 활용해 스택이 비어있는지 확인
System.out.println(stackInt.isEmpty());

//isFull 활용해 스택이 차있는지 확인 
System.out.println(stackInt.isFull());

//size 활용해 스택의 크기를 확인
System.out.println(stackInt.size());

 

 

Stack의 시간복잡도 

 

스택은 삽입이나 삭제할 때 맨 위에 있는 데이터를 삭제하기 때문에 시간 복잡도는 항상 O(1)이다. 

 

하지만 특정 데이터를 찾을 때는 순차적으로 수행해야 하기 때문에 시간 복잡도는 O(n)이다. 

 

 

 

 

Stack의 장점 

 

  • 크기가 동적이다. 
  • 런타임 시 필요에 따라 확장 혹은 축소될 수 있다. 
  • 간단하고 효율적이다. 
  • 인덱스를 활용해 요소에 따르게 접근할 수 있다.

 

 

 

 

 

Stack의 단점 

 

  • 배열에 비해 메모리 사용량이 많다.
  • 포인터를 위한 추가 메모리 공간이 필요하다. 
  • 미리 데이터 최대 개수를 지정하기 때문에 공간 낭비가 발생한다. 

 

 

 

 

728x90

'✏️ CS > 자료구조 & 알고리즘' 카테고리의 다른 글

[자료구조] 리스트(List)  (0) 2024.04.30
[자료구조] 큐(Queue)  (0) 2024.04.30
[자료구조] 배열(Array)  (0) 2024.04.26
[자료구조] 트리(Tree)  (0) 2024.04.17
[자료구조] 힙(Heap)  (0) 2024.04.17

댓글