2013-12-20 3 views
0

그래서 내가 여기있다, 내가 분석하고 어떻게 작동하는지 경계 큐에 대해, 그것에서 배울 필요가이 코드를 가지고 :대기열 및 대기열 제거 방법의 대기열 계수는?

class Queue<T> { // bounded 

    private T[] seq; // the sequence 
    private int size = 0; // size of sequence 
    private int head = 0; private int tail = 0; // front and rear 

    Queue(int n) { // n>0 
     seq = (T[])(new Object[n]); 
    } 

    Queue(){ this(10000);} // = seq=(T[])(new Object[10000]); 

    boolean isEmpty() { return size==0;} 

    boolean enq(T t) { 
     if (size<seq.length) { 
       seq[tail] = t; tail = (tail+1)%seq.length; size++; 
       return true; 
     } 
     else return false; 
    } 

    T deq() { 
     if (isEmpty()) return null; 
     else { 
      T temp = seq[head]; 
      head = (head+1)%seq.length; size--; 
      return temp; 
     } 
    } 
} 

그래서 모든 것은 괜찮지 만, 나는 왜 하나님의 이름으로 이해하지 않는다 모듈러스는 enq(T t) 방법 deq() 방법 (%) 동작 ...가

+0

그럼 제거하면 어떻게됩니까? –

+0

배열의 다음 요소는 새 꼬리가 될 것입니다 ... –

답변

2

큐가 큐의 내용 끝 "랩 어라운드"배열로 표현 될 수 있도록 계수 조작이 배열의 처음부터 (10)의 크기

예 :

[6th] [tail] [empty] [empty] [empty] [head] [2nd] [3rd] [4th] [5th] 
여기

머리 = 5, 꼬리 = 1, 12 개 항목의 전체가 추가되어 있기 때문에, 5 제거. 배열 끝에 충분한 공간이 없더라도 배열의 시작 부분에 배열의 용량까지 더 많은 데이터를 저장할 공간이 있습니다. 9ArrayIndexOutOfBoundsException 발생했을하는 0 대신 10되도록

모듈러스 연산은 각각 deqenq 및 동작에 랩 어라운드 할 headtail을 허용한다.

+0

이 대답을 쓰기 전에 잠깐 생각했습니다. : D 내 생각을 받아 들여 주셔서 감사합니다 ^^ –

+0

이제 생각 해보니 ... 내가 10 개의 요소로 이루어진 배열을 가지고 있고 큐가 2-3-4-5-6 요소를 차지한다고 가정 해 봅시다. 0-1 및 7-8-9는 비어 있습니다. 큐에 추가하면 꼬리는 7이므로 요소 번호가 없습니다. 7은 데이터를 얻은 다음 꼬리가'(tail + 1) % array.length'이되어 8 % 10 = 2 .. 줄 것입니다. 그래서 갑자기 꼬리가 머리가됩니까? –

+1

아니요, '8 % 10'은 '8'입니다. 계수는 10이 될 때까지 0으로 "재설정"하지 않습니다. '9 % 10'은 '9'이지만 '10 % 10'은 '0'입니다. – rgettman