스택
스택의 특징
- 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있다.
- top으로 정한 곳을 통해서만 접근 할 수 있다.
- LIFO 구조를 가진다.
스택의 기능
- push : stack의 위에 항목을 삽입
- pop : stack top의 항목 삭제
- peek or top : stack의 가장 위를 표시
- isempty : stack이 비어있는지 확인
- isfull : stack이 가득 차 있는지 확인
스택의 동작
push
- stack이 가득 찼는지 확인
- stack이 가득 차면 오류 발생 후 종료
- stack이 가득 차지 않으면 top 증가
- top이 가리키는 위치에 데이터 추가
pop
- stack이 비어 있는지 확인
- stack이 비어 있으면 오류 발생 후 종료
- stack이 비어 있지 않으면 top이 가리키는 데이터 제거
- top 감소
- 데이터 반환
시간 복잡도
Operation | Average | Worst |
---|
Access | Θ(n) | O(n) |
Search | Θ(n) | O(n) |
Insert | Θ(1) | O(1) |
Delete | Θ(1) | O(1) |
스택의 활용
- 웹 브라우저 방문기록
- 역순 문자열 만들기
- 실행 취소
- 후위 표기법 계산
- 수식의 괄호 검사
스택의 구현
- array 사용
- linkedlist 사용
- 크기가 동적이다.
- 포인터를 위한 추가 메모리 공간이 필요
큐
큐의 특징
- rear에서 삽입, front에서 삭제 작업이 이루어진다.
- FIFO 구조를 가진다
큐의 기능
- enqueue : queue의 rear에 항목을 추가
- dequeue : queue의 front의 항목을 제거
- peek : queue의 front의 항목을 반환
- isfull : queue가 가득 찼는지 확인
- isempty : queue가 비어 있는지 확인
큐의 동작
enqueue
- queue가 가득 찼는지 확인
- queue가 가득 차면 오류 발생 후 종료
- queue가 가득 차지 않으면 rear 증가
- rear가 가리키는 위치에 데이터 추가
dequeue
- queue가 비어 있는지 확인
- queue가 비어 있으면 오류 발생 후 종료
- queue가 비어 있지 않으면 front가 가리키는 데이터 제거
- front 감소
- 데이터 반환
시간 복잡도
Operation | Average | Worst |
---|
Access | Θ(n) | O(n) |
Search | Θ(n) | O(n) |
Insert | Θ(1) | O(1) |
Delete | Θ(1) | O(1) |
큐의 활용
- 우선순위가 같은 작업 예약
- 은행 업무
- 콜센터 고객 대기시간
- 프로세스 관리
- 너비 우선 탐색 구현
- 캐시 구현
큐의 구현
- array 사용
- linkedlist 사용
- 크기가 동적이다.
- 포인터를 위한 추가 메모리 공간이 필요