Реализация очереди с использованием циркулярного массива

Я пытаюсь реализовать очередь с использованием массива. Но моя реализация не работает. Я не могу найти ошибку. Моя реализация выглядит следующим образом:

class ArrayQueue[T: ClassManifest] extends Queue[T] {
private var A = new Array[T](2) // array for storing the queue elements
private var front = 0           // index of the front element in the array
private var rear = 0            // index of the rear element in the array
private var item_num = 0        // number of elements that are in the array


// when an array overflows we double the size of the array
private def grow() {            
    val B = A
    A = new Array[T](2 * B.length)
    if (front < rear) {
        for ( i <- 0 until B.length)
            A(i) = B(i)
            }
    else {
        System.arraycopy(B, rear, A, 0, B.length - rear)
        System.arraycopy(B, 0, A, B.length-rear, front)
        front = B.length - (rear - front)
        rear = 0
        }
}



def clear(): Unit = {     
    A = new Array[T](22)
    front = 0
    rear = 0
    item_num = 0 
    }


def isEmpty: Boolean = (item_num == 0) 


def head = { 
    if (isEmpty)
        throw new NoSuchElementException
    A(front)
    }


def dequeue(): T = {    
    if (isEmpty)
        throw new NoSuchElementException    
    front += 1  
    item_num = item_num - 1
    A(front - 1)


}

def enqueue(elem: T): Unit = {  

    A(rear) = elem
    rear += 1
    item_num += 1 
    if (rear == A.length - 1 && item_num != A.length)
        rear = 0
    if (item_num == A.length || rear == front - 1) {
        grow()
        }
    if (item_num == 0) {
        front = 0 
        rear = 0 }


    } 
  1. У очереди есть 5 методов, включая enqueue, dequeue, isEmpty, clear, head.
  2. В моем коде метод head возвращает элемент в передней позиции
  3. isEmpty возвращает true, если item_num = 0
  4. Метод Clear очищает очередь
  5. Метод enqueue должен добавлять элементы после задних и увеличивать задние на 1. Я думаю, что у меня здесь какая-то ошибка
  6. Метод dequeue возвращает первый элемент и удаляет его. Однако у меня возникает ошибка. Подскажите, пожалуйста, какие-нибудь подсказки. Заранее спасибо.
0
задан Servy 26 October 2012 в 19:48
поделиться