2016-10-04 7 views
0

Я новичок в структуре данных. Я рассмотрел реализацию линейной очереди после получения ссылки на многие книги.Разница между линейной очередью и круговой очередью

Это моя реализация для линейной очереди.

public class QueueObject { 

    private Object[] heads; 
    private int rearPointer, frontPointer, currentNumber; 

    public QueueObject(int capacity) { 
     heads = new Object[capacity]; 
    } 

    public boolean isEmpty(){ 
     return (currentNumber == 0); 
    } 

    public boolean isFull(){ 
     return (currentNumber == heads.length); 
    } 


    public void push(Object o){ 
     if(isFull()){ 
      return; 
     } 

    // means we are at last position (deal with wrap around) 
     if(rearPointer >= heads.length){ 
      rearPointer = 0; 
     } 
     heads[rearPointer++] = o; 
     currentNumber++; 
    } 


    public Object pop(){ 
     if(isEmpty()){ 
      return null; 
     } 

// dealing with wrap around 
     if(frontPointer >= heads.length){ 
      frontPointer = 0; 
     } 
     Object o = heads[frontPointer++]; 
     currentNumber--; 
     return o; 
    } 

} 

Теперь мой вопрос заключается в том, что обработка обертки вокруг круговой очереди вместо линейной очереди?

+2

То, что вы есть круговой очереди (кольцевой буфер). Линейная очередь всегда добавляется сзади и удаляется спереди. Внедрение линейной очереди в массиве неэффективно, потому что каждый раз, когда вы удаляете элемент, вам нужно переместить все остальные предметы, чтобы заполнить пустое место. –

+0

Спасибо, на самом деле я нашел эту реализацию в двух трех книгах и запутался. – Ishan

ответ

1

Да, это кольцевой буфер.

Циркулярная очередь представляет собой линейную структуру данных, в которой операции выполняются на основе принципа FIFO (First In First Out), а последнее положение связано с первой позицией, чтобы сделать круг.

Смотрите подробное описание на http://btechsmartclass.com/DS/U2_T10.html и https://www.quora.com/What-are-the-applications-of-circular-queues-in-C

Смежные вопросы