Массив структур и алгоритмов --2 объемного звучания очереди

Объемный очереди

Очередь значение:

Очередь представляет собой упорядоченный список, может быть массив или связанный список осуществляется
после первой в первом из принципа, что сначала хранятся в данной очереди сначала удаляются после депозита , чтобы удалить

Аналоговая идея массива очереди 
сама очередь представляет собой упорядоченный список, структура массива используется для очередей хранилища данных, то MaxSize максимальной емкость очереди , 
так как выходная очередь, подается на входе , соответственно , от заднего конца к ручке, таким образом , требует два передних и задних переменных были записаны до и после конца очереди индексов, 
фронт будет изменяться по мере выходных данных, а задний вводятся как изменения данных
Аналоговая круговых очереди Идея массива 
значение 1front быть отрегулировано переменным, указатель на первый элемент на передней части очереди, т.е. ARR [передний] является первым элементом очереди, переднее начальное значения = 0 
значения переменных 2rear быть скорректировано, положение указывает на последний элемент реальной очереди, пустое пространство , потому что это желательно сделать назначение, задний начальное значение = 0 
3 , когда очередь заполнена, при условии , что [сзади + . 1 ] ==% , то MaxSize спереди 
. 4 , когда очередь пуста условие ЗАДНЯЯ == передний 
. 5 число действительных очереди данных [ЗАДНЯЯ + MaxSize-передний]% , то MaxSize

Вопрос 1: Почему получить значение% MaxSize

 

 Так как массив представляет собой кольцевой массив, когда конец массива полна, а начало извлечения данных из массива, то данные могут быть сохранены в пространстве. Так использование% MaxSize

Является ли первое значение в массиве, задний массив представляет собой последнее значение представляет фронт, кольцевой массив координат, в это время не означает, что оно относится к началу или концу

 

Вопрос 2: задний == передних и пустая очередь полные очереди [задние +-]% MaxSize == передние разные условия:

 

 Как показано в соответствии с, реальной == Спереди два случая, пустой или полный. Мы модифицируем его условие, чтобы сохранить элемент пространства. Другими словами, когда очередь заполнена, есть свободный массив ячеек.

 Как показано ниже, мы считаем, что эта очередь полна, то есть, мы не допускаем происходит рисунок.

 

пример

 

com.ujiuye.queue пакет; 

Импорт java.util.Scanner; 

общественный  класс CircleArrayQueue {
     публичных  статический  недействительный основной (String [] арг) { 
        системы. OUT .println ( " случаи Test Model Queue " );
         // длина массива 3, Тем не менее, один из которых является пустым, вы можете поместить максимум двух данных 
        CircleArray Queue = новый новый CircleArray ( 3. ); 
        сканер SC = новый новый (. систему сканера в );
         обугленного Key = «  » ; 
        булево в флага = истина ;
        это время (в Flag) { 
            Системы. OUT .println ( " S [Показать], очередь дисплея " ); 
            . Система OUT .println ( " E [Выход], удаление очередь " ); 
            . Система OUT .println ( " A [надстройки] добавления очереди " ); 
            . Системный OUT .println ( " G [GET], приобретает очередь данных " ); 
            . системного OUT .println ( " Н [голова], см данных заголовка столбца " ); 
            . Системный OUT .println ( " ==================" ); 
            . В системе OUT .println ( " Введите операцию следует выполнить (или английский акроним Пожалуйста , ответьте!) " ); 
            Key = sc.next () для Шара (. 0 ),
             переключатель (Key) {
             Case  ' S ' : 
                queue.showQueue (); 
                BREAK ;
             Case  ' ' : 
                . система OUT .println ( " добавить значение " );
                 INT n- = sc.nextInt (); 
                queue.addQueue (n-); BREAK
                ;
            Кейс  ' г ' :
                 попытка {
                     INT Рез = queue.getQueue (); 
                    Система. из .printf ( " 取出的数值是% d \ п " , разрешение); 
                } Поймать (Exception е) { 
                    System. из .println (e.getMessage ()); 
                } 
                Перерыв ;
            случай  ' ч ' :
                 попытка {
                     INT Рез = queue.headQueue ();
                    Система. из .printf ( " 队列头数值是% d \ п " , разрешение); 
                } Поймать (Exception е) { 
                    System. из .println (e.getMessage ()); 
                } 
                Перерыв ;
            Случай  ' е ' : 
                sc.close (); 
                флаг = ложь ;
                перерыв ;
            по умолчанию :
                 перерыв ; 
            } 
        } 
        
    } 
} 
Класс CircleArray {
     // представляет собой максимальную емкость массива 
    Private  Int MaxSize;
     // первые точки элемента в очереди, обр [фронт] является первым элементом очереди, начальное значение 0 
    Отдельный  INT спереди;
     // указывает на последнюю очередь позиция заднего элемента, пустое пространство , потому что это желательна сделать назначение, начальное значение заднего 0 = 
    Private  междунара заднего;
     // используется для хранения данных, аналоговых очередями 
    Private  INT [] ARR;
     общественное CircleArray ( INT в MaxSize) {
         это . = MaxSize MaxSize; 
        ARR = новый новый  INT [MaxSize]; 
    } 
    // если очередь заполнена, при условии , что [REAR + 1.] == Front% , то MaxSize 
    общественностиisFull Boolean () {
         возвращения (+ REAR 1. ) MaxSize% == спереди; 
    } 
    // если очередь пуста состояние задний == фронт 
    общественного Логическое IsEmpty () {
         возвращающие REAR == фронт; 
    } 
    // для добавления данных в очереди 
    общественности  недействительными addQueue ( ИНТ n-) {
         // сначала определить , является ли очередь полным 
        ıf (isFull ()) { 
            системы. OUT .println ( « очередь заполнена, строка » );
             возвращение ; 
        } 
        // так как задний элемент представляет последний положение, конечно , пустой, так что вы не можете сразу перейти в плюс 1 
        обр [REAR] =n-;
         //После того, как задний сдвиг вокруг рассматриваемой задачи, так что по модулю 
        задней = (+ сзади 1. )% MaxSize; 
    } 
    // получить данные из очереди 
    общественного  Int getQueue () {
         // сначала определить , является ли очередь пуста 
        ЕСЛИ (IsEmpty ( )) {
             // Выдает не возвращает 
            вбрасывание  новый новый в RuntimeException ( « очередь не пуста, никакого значения » ); 
        } 
        // получить первое значение в очереди 
        INT значение = ARR [перед];
         // этот случай должен фронт сдвиг, еще раз , чтобы убедиться , что значение является первым , чтобы получить значение, принимая во внимание вопросы , связанные с 
        фронтом = (фронт + 1. )% MaxSize;
         возвращаемое значение; 
    }
    // все значения в очереди 
    общественной  ничтожной showQueue () {
         // сначала определить , является ли очередь пуста 
        IF (IsEmpty ()) {
             вбрасывание  нового нового RuntimeException ( « очередь пуста, нет значения » ); 
        } 
        // итерация из фронт перемещение первого значения 
        для ( INT I = фронта, я <размер () + передний; я ++ ) { 
            системы. OUT .printf ( " АРР [D%] D = + % \ п " , то MaxSize I%, ARR [ % I MaxSize]); 
        } 
    } 
    // определить количество данных текущей листинг 
    общественного  ИНТ возвращениеразмер () {
        (Front-сзади.Основный MaxSize +)% MaxSize; 
    } 
    // отображение очереди данных головной 
    общественности  Int headQueue () {
         IF (IsEmpty ()) {
             вбрасывание  нового новый RuntimeException ( " очередь пуста, нет значения " ); 
        } 
        возвращение ARR [ передний]; 
    } 
}

 

..

рекомендация

отwww.cnblogs.com/bai3535/p/12094059.html