티스토리 뷰
Queue는 FIFO(First In First Out)의 구조를 가진 자료구조로 BFS를 구현할 때 많이 사용이 됩니다. 라이브러리가 있다면 사용하면 간단하게 Queue를 이용할 수 있지만 라이브러리를 쓰지 못하는 곳에서는 Queue를 구현해야만 합니다.
그렇다고 Queue를 구현하기에는 먼가 벅차게 느껴질 때!!! Queue에 들어가는 자료의 개수가 어느정도 일지 대략적으로라도 알 수 있을 경우는 배열을 이용해서 Queue처럼 사용할 수 있습니다!
1 | int[] queue = new int[100]; |
예제로 사용할 queue라는 이름의 배열을 만들었습니다. 이제 queue 배열 안의 index를 가르킬 2개의 변수를 선언하겠습니다.
1 2 | int front = -1; int end = -1; |
front는 queue 배열의 앞부분 즉, FIFO 를 구현하기 위해서 앞에서부터 자료를 선택하기 위한 변수입니다.
end는 queue 배열의 빈 공간 즉, 후에 들어온 자료를 넣어주기 위한 변수입니다.
queue에 자료를 넣어보겠습니다. int형 배열이므로 int형 변수를 넣어주었습니다.
1 | queue[++end] = 3; |
3을 넣어주었습니다. 몇 개의 자료를 더 넣어줘 보겠습니다.
1 2 3 4 | queue[++end] = 7; queue[++end] = 8; queue[++end] = 1; queue[++end] = 2; |
빈 공간을 가리키는 end 변수를 +1 씩 시켜주면서 배열의 빈공간에 변수들을 넣어주었습니다. 이제 넣은 변수들을 꺼내보겠습니다.
간단하게 앞쪽부터 자료를 가리키는 front 변수를 +1 시켜줌으로서 처음 넣었던 자료에 접근하였습니다. 나머지 자료들도 모두 꺼내보겠습니다.
1 2 3 4 | data = queue[++front]; data = queue[++front]; data = queue[++front]; data = queue[++front]; |
나머지 자료들도 front 값을 +1 씩 시켜줌으로서 FIFO 구조에 알맞게 앞서 넣은 자료에 먼저 접근하도록 하였습니다.
위의 배열이 queue와 같이 FIFO 구조로 잘 동작하고 있는지 출력을 해보았습니다. 최종 코드는 다음과 같습니다.
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 | int[] queue = new int[100]; int front = -1; int end = -1; System.out.println("3 넣음"); queue[++end] = 3; System.out.println("7 넣음"); queue[++end] = 7; System.out.println("8 넣음"); queue[++end] = 8; System.out.println("1 넣음"); queue[++end] = 1; System.out.println("2 넣음"); queue[++end] = 2; int data = queue[++front]; System.out.println(data+" 뻄"); data = queue[++front]; System.out.println(data+" 뻄"); data = queue[++front]; System.out.println(data+" 뻄"); data = queue[++front]; System.out.println(data+" 뻄"); data = queue[++front]; System.out.println(data+" 뻄"); |
출력은 다음과 같이 잘 나왔습니다.
1 2 3 4 5 6 7 8 9 10 | 3 넣음 7 넣음 8 넣음 1 넣음 2 넣음 3 뻄 7 뻄 8 뻄 1 뻄 2 뻄 |
queue에 넣을 자료의 개수만 대략적으로 알 수 있다면 그보다 넉넉히 배열을 선언해서 Queue의 역활로 사용할 수 있는 것에 대해 알아보았습니다! 다음엔 Class를 이용해서 실제 Queue를 구현해 보겠습니다.
'알고리즘 > 공부' 카테고리의 다른 글
[Java] 배열로 Stack을 구현해보자! (0) | 2019.02.26 |
---|---|
[Java] 다중 반복문에서 라벨(label)을 사용해보자 (0) | 2019.01.06 |
[Java] 비트 마스크에 대해서 알아보자 (0) | 2018.10.16 |
[백준] 10828번 스택 (0) | 2018.08.30 |
- Total
- Today
- Yesterday