Arhn - архитектура программирования

Найти количество элементов в циклической очереди

Как найти количество элементов в циклической очереди? |передний - задний| не всегда работает.

Есть ли одна формула, чтобы узнать, сколько элементов находится в круговой очереди, используя передний, задний и размер массива?

16.12.2010

  • Ваш вопрос не очень ясен. Что плохого в обходе очереди до тех пор, пока вы не вернетесь к началу, считая элементы по мере продвижения? 16.12.2010
  • какой язык? какая библиотека? 16.12.2010

Ответы:


1

на самом деле размер был бы,

size = front > rear ? (MAX - front + rear + 1) : (rear - front + 1);

или можно перейти к общей формуле:

size = abs(abs(MAX - front) - abs(MAX -rear));//this works in every situation
06.11.2011
  • Общая формула неверна. Не работает для обоих случаев, когда голова›хвост и хвост›=голова. Кроме того, по определению круговой очереди (MAX ›= передняя, ​​задняя) нет необходимости указывать абсолютное значение для MAX-передней и MAX-задней очереди. 24.04.2016

  • 2

    Предполагая, что вы реализуете его, используя массив размером N, поэтому есть указатели, указывающие на переднюю и заднюю часть. Используйте следующую формулу:

    size = front > rear ? (front - rear) : (front+N -  rear);
    
    16.12.2010

    3

    Предполагая, что вы используете массив размера N для реализации очереди, размер очереди будет size = (N-front + rear) mod N.

    08.08.2012
  • Вы можете это объяснить? 23.10.2019
  • Это не верно. Не работает для циклической очереди. Возьмем любой пример, где f›r. Эта формула дает неправильные результаты. 16.06.2020

  • 4

    Стандартный ответ — взять два итератора в начале, увеличить первый один раз, а второй два раза. Проверьте, указывают ли они на один и тот же объект. Затем повторяйте до тех пор, пока тот, который увеличивается дважды, либо не достигнет первого, либо не достигнет конца. внутри этого цикла используйте счетчик, чтобы получить длину CQuueeue

    27.01.2011
  • Или иначе известный как процедура обнаружения цикла Флойда. 27.01.2011

  • 5

    Ни одна из формул не учитывает пустой (нулевой) случай. Это даст вам количество свободных байтов, доступных в очереди:

    FreeSpace = (printRdQue == printWrQue) ? PRINT_QUEUE_SIZE :
               (PRINT_QUEUE_SIZE - printWrQue + printRdQue) % PRINT_QUEUE_SIZE;
    
    27.08.2014

    6

    может ли ваша очередь содержать один и тот же элемент в нескольких местах? если это возможно, то я не думаю, что вы можете это сделать, поскольку нет никакого способа узнать разницу между:

    a->b->c

    а также

    a->b->c->a->b->c

    если он не может содержать один и тот же элемент более одного раза, просто просматривайте очередь, пока не найдете элемент, который вы уже видели

    16.12.2010

    7

    Нет элементов в циклической очереди,

    size = (N-f+r) mod N
    

    куда

    • N - размер массива, используемого в циклическом режиме.
    • индекс f переднего элемента
    • индекс r сразу за задним элементом

    Эта формула работает как для линейных, так и для кольцевых очередей.

    20.11.2012
  • Можете ли вы объяснить, как это было получено? 22.06.2015
  • это также вернет 0, когда очередь заполнена, и должно вернуть N 24.02.2016
  • В круговом массиве с емкостью 12 и r = 1, f = 3 ваша формула дает 10, я думаю, что должен быть +1 09.09.2018

  • 8

    Что нужно для реализации циклической очереди?

    Ответ: вам понадобятся передние и задние узлы + список элементов + количество_элементов.

    Конечно, это реализовано только тогда, когда очередь конечна, когда речь идет о

    динамическое размещение будет другим.

    Взгляните на пример на языке C,

    typedef struct
    {
    
    TYPE items[MAXSIZE];
    
    TYPE front;
    
    TYPE rear;
    
    int count_items;
    
    } QUEUE;
    

    Это гарантирует вам точное количество элементов, находящихся в настоящее время в очереди.

    Когда вы хотите вставить элемент в очередь, вы просто увеличиваете значение Rear и count_items, а когда хотите удалить элемент из очереди, вы просто уменьшаете значение Rear и count_items.

    17.12.2018

    9

    нет. элементов = (сзади + MAX_SIZE - спереди) % MAX_SIZE + 1

    05.08.2020

    10

    Самый простой способ подсчитать количество элементов в циклической очереди:

    если front > rear(т.е. спереди впереди, чем сзади) Просто подсчитайте количество пустых мест между ними

    front - (rear+1)
    

    иначе если front < rear:

    rear - front + 1
    

    Программа C, если вам нужно:

        int find_ele(int total,int front,int rear){
             if(rear < front ) {  \\1st case
    int res =    front - rear + 1;
    return (total-res);}
    
    else{
          return (rear - front + 1);
    }
    }
    
    30.09.2020

    11

    Предполагая, что вы реализуете очередь с использованием кругового массива A[0, n-1], где (n-1)-й индекс используется для хранения полного/пустого состояния, формула будет выглядеть так:

    Количество элементов = { зад-перед + 1 , если зад==перед

                     { rear-front + n , otherwise 
    

    Мы будем перемещать очередь по часовой стрелке при каждой постановке в очередь или удалении из очереди.

    10.06.2021

    12
  • Извините, форматирование отключено - я новичок в этом. «Количество = 0;» должны быть на отдельной строке, как и вложенные строки операторов if... 17.12.2010

  • 13
  • пожалуйста, поместите небольшое описание. 07.11.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..