chapter 04 - 1 스택
데이터를 일시적으로 저장하기 위한 자료구조
후입선출 구조 (LIFO (Last In First Out) : 가장 나중에 넣은 데이터를 가장 먼저 꺼냄)
- 스택 관련 키워드(용어)
- push : 스택에 데이터를 넣는 작업
- pop : 스택에서 데이터를 꺼내는 작업
- top : push / pop 하는 위치
- bottom : 스택의 가장 아랫부분
- Java에서 메서드 호출하고 실행 시 프로그램 내부에서는 스택 사용
- 스택 만들기
- 스택 본체의 배열, 스택 포인터, 스택 용량 등의 변수 필요
- 연습문제
- 클래스 IntStack의 모든 메서드를 사용하는 프로그램
(ⓒⓞⓓⓔ) ex01.java
- 임의의 객체형 데이터 쌓을 수 있는 제네릭 스택 클래스 Gstack<E> 작성
(ⓒⓞⓓⓔ) ex02.java
- 하나의 배열을 공유하여 2개의 스택을 구현하는 int형 데이터용 스택 클래스 생성
(ⓒⓞⓓⓔ) ex03.java
chapter 04 - 2 큐
데이터를 일시적으로 쌓아두기 위한 자료구조
선입선출 구조 (FIFO (First In First Out) : 가장 먼저 넣은 데이터를 가장 먼저 꺼냄)
- 큐 관련 키워드 (용어)
- enqueue : 큐에 데이터 넣는 작업 / 시간복잡도 : O(1)
- dequeue : 큐에서 데이터를 꺼내는 작업 / 시간복잡도 : O(n)
- front : 데이터를 꺼내는 쪽
- rear : 데이터를 넣는 쪽
- 배열로 큐 만들기
- enqueue : 처리의 복잡도는 O(1)
- dequeue : que[0] 값 꺼낸 후 요소를 모두 맨 앞으로 옮김 / 처리 복잡도는 O(n)
- 링 버퍼로 큐 만들기
- 링 버퍼 (ring buffer) : 배열의 처음과 끝이 연결되어 있는 자료 구조
- 변수 front, rear가 중요 / 각 처음 요소의 인덱스와 끝 요소의 하나 뒤의 인덱스 의미
- enqueue / dequeue 복잡도 모두 O(1)
- front, rear의 값 업데이트 하며 작업 수행하므로 자리 이동 문제 해결 가능
- 큐 클래스 IntQueue
- 검색 메서드 indexOf에서 스캔 시작은 큐의 첫 요소 front 변수 위치임
- dump 메서드는 큐에 있는 모든 데이터를 front -> rear 순으로 출력하는 메서드
- 연습문제
- 큐를 구현하는 프로그램, 실습 4-3 메서드에 대응하는 메서드 모두 생성하는 프로그램
(ⓒⓞⓓⓔ) IntAryQueue.java
- 클래스 IntQueue에 임의의 데이터를 검색하는 메서드 추가(큐 안에서 몇번째인지)
(ⓒⓞⓓⓔ) IntQueue.java
- 임의의 객체형 데이터 쌓아 놓을 수 있는 제네릭 큐 클래스 Gqueue<E> 작성
(ⓒⓞⓓⓔ) Gqueue.java
- 양방향 대기열을 구현하는 클래스 IntDeque 만들기
(ⓒⓞⓓⓔ)
** 참고내용 **
링 버퍼의 활용
- 링 버퍼는 오래된 데이터를 버리는 용도로 활용함
- 정수 입력은 무한히 할 수 있지만, 가장 최근 데이터로만 저장되어 남아 있음.
'Android ᙏ̤̫͚ > JAVA Algorithm' 카테고리의 다른 글
Chapter 06. 정렬 (1) (0) | 2021.01.21 |
---|---|
Chapter 05. 재귀 알고리즘 (0) | 2021.01.16 |
Chapter 03. 검색 (0) | 2021.01.13 |
Chapter 02. 기본 자료구조 (0) | 2021.01.10 |
Chapter 01. 기본 알고리즘 (0) | 2021.01.08 |