Queue๋
Stack ์๋ฃ๊ตฌ์กฐ์ ๋ค๋ฅด๊ฒ FIFO(First In First Out) ๋ฐฉ์์ ์ ์ ์ ์ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
ํ๋ ์ต๊ทผ ์ฌ์ฉ ๋ฌธ์, ์ธ์์์ ๋๊ธฐ ๋ชฉ๋ก, ๋ฒํผ ๋ฑ์ ๋ถ์ผ์์ ์ฌ์ฉ๋๋ฉฐ ์คํ์ ์์๋ง ๋ค๋ ค ์์ด ์๋ฃ๊ฐ ํ ๋ฐฉ์์ผ๋ก๋ง ํ๋ฅธ๋ค๋ฉด ํ๋ ์ ๋ฐฉํฅ์ผ๋ก ๋ค๋ ค ํ์ดํ ๊ฐ์ ๋ชจ์์ผ๋ก ์๋ฃ๊ฐ ํ๋ฅธ๋ค.
ํ์ ์๋ฆฌ
ํ๋ ๋ค์๊ณผ ๊ฐ์ด front
์ rear
๋ก ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ๊ฒฝ๊ณ๋ฅผ ์๋ฆฐ๋ค.
ํ์ ๋ฐ์ดํฐ ์ถ๊ฐํ๊ธฐ
๋ง์ฝ ํ๊ฐ ๋น์ด์๋ค๋ฉด front
์ rear
์ ๊ฐ์ ๊ณณ์ ํฅํ๊ฒ ๋ ๊ฒ์ด๊ณ 20 ๊ณผ 30 ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ณํ๋์ง ๋ด๋ณด์.
front
์ rear
์ ํฌ์ธํฐ๊ฐ ๋ฌ๋ผ์ก๋๋ฐ ์ด๋ฐ ์์ผ๋ก ์ถ๊ฐ๋ฅผ ํ๋ค๋ฉด rear += 1
์ผ๋ก rear
์ ์์น๊ฐ ๋ณ๊ฒฝ๋๋ฉฐ rear
์ ์ ํด๋น๋๋ ์ธ๋ฑ์ค์ ๊ฐ์ด ์ถ๊ฐ๋ ๊ฒ์ด๋ค.
ํ์ ๋ฐ์ดํฐ ์ถ์ถํ๊ธฐ
๊ทธ๋ผ ํ์ฌ์ ๊ฐ์ ์ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋๋ front
์ ํฌ์ธํฐ๊ฐ ํ ์นธ ๋ค๋ก ์ด๋ํ๊ฒ ๋๋ฉฐ ํด๋น ์ธ๋ฑ์ค์ ๊ฐ์ ์ถ์ถํ๋ค.
๊ฐ์ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ค๋ฉด ๊ฐ๋ณ์ ์ธ front์ rear๋ก ์ธํ ๋ฐฐ์ด์ ๊ณ ์ ์ ๊ธธ์ด๋ฅผ ๋ฒ์ด๋๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ฏ๋ก ArrayList๋ก ๊ตฌํ์ ํด์ผ ํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๋ ์๊ธฐ๋ Front์ ๊ณต๋ฐฑ์ ๋งค์ฐ๊ธฐ ์ํด Front ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์์ผ๋ก ํ ์นธ์ฉ ์๋น๊ธฐ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
ArrayList์ ๊ตฌํ
class IntQueue{
private int front;
private int rear;
private int max;
private int[] queue;
public IntQueue(int capacity){
max = capacity;
rear = -1;
front = 0;
queue = new int[max];
}
boolean empty(){
return (front == (rear+1));
}
boolean full(){
return (rear >= max-1);
}
// rear๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ
void add(int x){
if(full()) throw new ArrayIndexOutOfBoundsException();
queue[++rear] = x;
}
// front๋ ๋ฐ์ดํฐ๋ฅผ ๋บผ ๋๋ง ์ฌ์ฉ
int remove(){
if (empty()) throw new ArrayIndexOutOfBoundsException();
return queue[front++];
}
int peek(){
return queue[front];
}
}
LinkedList์ ๊ตฌํ
์์ ์ค..
๋๊ธ