2016-01-28 4 views
1

я реализовал очереди приоритета с массива (работы школы), и это выглядит, как показано ниже:Dequeue в приоритетной очереди

int dequeue(int a[], int n){ 

    int i, numberToDequeue; 
    numberToDequeue = a[0]; 

    for(i = 0; i < n; i++){ 
     a[i] = a[i+1]; 
    } 
    return numberToDequeue; 
} 

Dequeue в приоритетной очереди должны принимать O (1) время.

Тем не менее, в моем коде, это занимает O (1) время DEQUEUE и

O (N) время, чтобы переместить все элементы в передний на 1 индекс.

Мне было интересно, есть ли лучшее решение, имеющее сложность времени O (1).

Вся форма ответа будет принята с благодарностью.

+0

Очереди на самом деле не должны быть помещены в непрерывной памяти ... – ForceBru

+1

Lookup C++ кольцевой буфер –

+0

Ну, я понял, что я на самом деле могу сортировать мои номера в порядке возрастания, так что я могу просто уменьшить свой ARRAYSIZE после каждый dequeue вместо того, чтобы иметь цикл for, чтобы сдвинуть каждый элемент вперед на 1 индекс. – Kai

ответ

0
int dequeue(int a[], int n){ //provided that the numbers are in ascending order 

    int numberToDequeue; 
    numberToDequeue = a[n - 1]; 
    n--; 
    return numberToDequeue; 
} 
+0

Добро пожаловать в переполнение стека! Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. – ryanyuyu