| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 액티비티 ANR
- 백준
- 백준 알고리즘
- DFS
- 안드로이드 AdapterView
- android adapterview
- anr
- oracle
- application not responding
- 소수 알고리즘
- 자료구조
- 깊이우선탐색
- 컬렉션
- Github
- java
- android support
- 자바 컬렉션
- android fragment
- 알고리즘
- 안드로이드 DBMS
- 너비우선탐색
- support 라이브러리
- 소수
- SQLite와 Realm 차이점
- db
- BFS
- support fragment
- 안드로이드 ANR
- 안드로이드 파일
- 안드로이드
Archives
- Today
- Total
밍의 기록들😉
[자료구조] 큐(Queue) 본문
큐(Queue)의 개념
한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료구조 (선형 자료 구조)
가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO; First In First Out) 방식으로 자료를 처리
큐(Queue)의 에러
큐 오버플로우 : 큐의 모든 기억장소가 꽉 채워져 있는 상태이므로 더 이상 자료를 삽입할 수 없을 때 발생
큐 언더플로우 : 큐에 제거할 자료가 없을 때 발생
큐(Queue)의 연산
시작과 끝을 표시하는 두 개의 포인터가 있는데, 프런트(F, Front)는 가장 먼저 삽입된 자료의 기억공간을 가리키는 포인터이며 삭제 작업을 할 때 사용한다. 리어(R, Rear)는 가장 마지막에 삽입된 자료가 위치한 기억공간을 가리키는 포인터이며 삽입 작업을 할 때 사용한다.
create(size) : 큐의 크기를 size로 지정하고 생성한다.
push(item) : item을 큐에 삽입한다.
pop() : 큐에 front에 있는 항목을 제거한다.
front() : 큐의 가장 앞에 있는 항목을 반환한다.
size() : 큐에 있는 item의 개수를 반환한다.
큐(Queue)의 예제
상태의 의존관계가 없을 때 A와 B가 서로 관련이 없지만 모두 하긴 해야할 때
= 병렬화, 스케줄링(Scheduling)
BFS(너비 우선 탐색)
큐(Queue)의 구현
class Queue {
int[] data = new int[100];
int f; // 가장 먼저 삽입된 자료의 기억공간을 가리키는 포인터
int r; // 가장 마지막에 삽입된 자료가 위치한 기억공간을 가리키는 포인터
int capacity;
void create(int m){
capacity = m;
f = 0;
r = 0;
}
void push(int item){
if(r-f >= capacity){
System.out.println("Queue Overflow!");
}
else{
data[r++] = item;
}
}
void pop(){
if(r-f <= 0){
System.out.println("Queue Underflow!");
}
else{
data[f] = 0;
f++;
}
}
// 큐의 맨 앞에 있는 값을 반환
// 단, 반환할 값이 없다면 -1 반환
int front(){
if(r-f <= 0){
return -1;
}
else{
return data[f];
}
}
int size(){
return r-f;
}
}
public class DataStructureQueue {
public static void main(String[] args) {
Queue q1 = new Queue();
q1.create(3);
q1.push(1);
q1.push(2);
q1.push(3);
q1.push(4); //overflow
System.out.println(q1.front()); //1
q1.pop();
System.out.println(q1.front()); //2
q1.pop();
q1.pop();
q1.pop(); // underflow
System.out.println(q1.size()); // 0
}
}
'자료구조, 알고리즘 > 기본다지기' 카테고리의 다른 글
| [그래프] 그래프의 표현 (인접 행렬, 인접 리스트, 간선 리스트) (0) | 2018.09.08 |
|---|---|
| [그래프] 그래프의 기본 (0) | 2018.09.08 |
| [자료구조] 스택(Stack) (1) | 2018.08.27 |
| [다이나믹] 거듭제곱 구하기 (0) | 2018.08.20 |
| [다이나믹] 팩토리얼 구하기 (0) | 2018.08.20 |
Comments