자료구조 공부

스택(Stack)과 큐(Queue)

ogh4554 2024. 11. 10. 21:00

스택과 큐는 배열, 리스트와 달리 인덱스를 통해 데이터에 접근 할 수 없음.

원소의 삽입과 삭제를 자주 반복해야 할 경우 리스트보다 스택과 큐를 사용하는 것이 메모리 측면에서 훨씬 좋다.

길찾기 문제에서 이동할 수 있는 다음 노드를 큐에 저장할 경우 BFS, 스택에 저장할 경우 DFS

 

 

1. 스택 (Stack<T>) : LIFO (Last In First Out)

: 후입선출. 데이터를 추가할 때 탑을 쌓듯이 차곡차곡 데이터가 쌓이게 됨.

데이터를 꺼내고자 하면 가장 최근에 쌓았던 데이터를 반환 받음. 

 1) 삽입

: Stack.Push();

 - 가장 마지막에 데이터를 추가하기 때문에 O(1)의 시간 복잡도를 가짐

 - 단, 내부 배열 최대 크기에 도달했다면 두배 크기로 재할당하기 때문에 O(n)의 시간 복잡도를 가짐

 

 2) 삭제

: Stack.Pop();

 - 가장 마지막에 추가된 데이터를 반환 및 스택에서 제거

 - 가장 마지막의 데이터를 제거하기 때문에 O(1)의 시간 복잡도를 가짐

 - 스택에 데이터가 하나도 추가되어 있지 않은 경우 에러 발생

 

 3) 읽기

: Stack.Peek();

 - 가장 마지막에 추가된 데이터를 반환

 - 가장 마지막의 데이터를 읽기 때문에 O(1)의 시간 복잡도를 가짐

 - 스택에 데이터가 하나도 추가되어 있지 않은 경우 에러 발생

 

 4) 사용 메서드

메서드 설명
Push(); 스택에 원소를 추가하는 함수
Peek(); 마지막에 추가된 데이터를 반환하는 함수
Pop(); 마지막에 추가된 데이터를 반환하고 스택에서 삭제하는 함수
TryPeek(); Peek과 같은 작업을 수행하지만 작업 성공 여부를 bool 값으로 반환
out 키워드로 받을 수 있음
TryPop(); Pop과 같은 작업을 수행하지만 작업 성공 여부를 bool 값으로 반환
out 키워드로 받을 수 있음
Contains(); 매개변수로 전달한 값이 스택에 존재하는지 여부를 bool 값으로 반환
ToArray(); 스택을 배열로 변환

 

 


 

2. 큐 (Queue<T>) : FIFO (First In First Out)

: 선입선출. 일반적인 줄서기 처럼 먼저 대기했던 데이터가 먼저 반환되는 선형자료구조

1) 삽입

: Queue.Enqueue();

 - O(1)의 시간 복잡도를 가짐

 - 만약 내부 배열의 크기에 도달했다면 재할당. O(n)의 시간 복잡도를 가짐

 

2) 삭제

: Queue.Dequeue();

 - 가장 처음 추가된 데이터를 반환하고 큐에서 삭제. O(1)의 시간 복잡도를 가짐

 

3) 읽기

: Queue.Peek();

 - 가장 처음 추가된 데이터를 반환. O(1)의 시간 복잡도를 가짐

 

 4) 사용 메서드

메서드 설명
Enqueue(); 큐에 원소를 추가하는 함수
Peek(); 큐의 맨 앞 데이터를 반환하는 함수
Dequeue(); 큐의 맨 앞 데이터를 반환하고 큐에서 삭제하는 함수
TryPeek(); Peek과 같은 작업을 수행하지만 작업 성공 여부를 bool 값으로 반환
out 키워드로 받을 수 있음
TryDequeue(); Dequeue와 같은 작업을 수행하지만 작업 성공 여부를 bool 값으로 반환
out 키워드로 받을 수 있음
Contains(); 매개변수로 전달한 값이 큐에 존재하는지 여부를 bool 값으로 반환
ToArray(); 큐를 배열로 변환

 

 

 

** 틀린 정보가 있다면 댓글로 알려주세요 **