Member 13739181 Ответов: 2

Каким будет код для реализации оптимизированной версии queue в C++?


Эта проблема должна быть решена с помощью c++, и это будет полезно, если вы напишете код. я также написал код. но он не работает.
#include <iostream>
#include <cassert>
#define MAX 5

using namespace std;

class queue{
public:
    queue();
    void Enqueue(int);
    int Dequeue();
    int size() const;
    bool isEmpty() const;

private:
    int arr[MAX];
    int sz;
    int front_idx,back_idx;
};

queue :: queue(){
    sz = 0;
    front_idx = 0;
    back_idx = 0;
}

void queue :: Enqueue(int val){
    if(sz == 5){
        //Queue Overflow
        assert("");
    }
    else{
        arr[back_idx] = val;
        sz++;
        back_idx = (back_idx + 1) % MAX;
    }
}

int queue :: Dequeue(){
    if(sz == 0){
        //Queue Underflow.
        assert("");
    }
    else{
        int ret_val = arr[front_idx];
        front_idx = (front_idx+1) % MAX;
        sz--;
        return ret_val;
    }
}

int queue :: size() const{
    return sz;
}

bool queue :: isEmpty() const{
    return (sz == 0);
}

int main()
{
    queue q;
    q.Enqueue(5);
    q.Enqueue(3);
    q.Enqueue(2);

    printf("%d\n",q.Dequeue());
    printf("%d\n",q.Dequeue());
    q.Enqueue(1);
    printf("%d\n",q.Dequeue());
    printf("%d\n",q.Dequeue());

}


Что я уже пробовал:

я пытался поставить в очередь , удалить из очереди и для отображения также, но код не работает.

Patrice T

- я тоже написал этот код. но он не работает."
Покажите свой код, и мы поможем его исправить.

Member 13739181

хорошо, я даю, но. но лучше будет получить главный ответ, а теперь я даю вам свой код.

#include <iostream>
#включить <cassert>
#определите максимум 5

использование пространства имен std;

очередь классов{
общественный:
очередь();
void Enqueue(int);
инт извлечения();
int size() const;
bool isEmpty() const;

частный:
int arr[Макс];
int sz;
инт front_idx,back_idx;
};

очереди : очереди(){
sz = 0;
front_idx = 0;
back_idx = 0;
}

void queue :: Enqueue(int val){
если(sz == 5){
//Переполнение Очереди
утверждать("");
}
еще{
arr[back_idx] = val;
СЗ++;
back_idx = (back_idx + 1) % MAX;
}
}

очереди инт :: извлечения(){
если(sz == 0){
//Недостаточный Поток Очереди.
утверждать("");
}
еще{
инт ret_val = ОБР[front_idx];
front_idx = (front_idx+1) % MAX;
СЗ--;
вернуться ret_val;
}
}

int queue :: size() const{
возврат sz;
}

bool queue :: isEmpty() const{
возврат (sz == 0);
}

тап_п()
{
очереди вопрос;
q.Enqueue(5);
q.Enqueue(3);
q.Enqueue(2);

printf("%d\n",q.Dequeue());
printf("%d\n",q.Dequeue());
q.Enqueue(1);
printf("%d\n",q.Dequeue());
printf("%d\n",q.Dequeue());

}


А ТЕПЕРЬ СКАЖИТЕ МНЕ, ЭТО НАЗЫВАЕТСЯ ОПТИМИЗАЦИЕЙ? ДАЙ МНЕ ПРАВИЛЬНЫЙ КОД.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 13739181

а как насчет кода?
вы что-нибудь написали?

Dave Kreskowiak

Ты упускаешь главное. Вы не получите никакого кода, написанного для вас. Перестань требовать этого.

Member 13739181

расскажите мне об оптимизации.

Dave Kreskowiak

Это не имеет ничего общего с оптимизацией. Вы должны отладить свой код, чтобы выяснить, почему он не работает так, как ожидалось.

Member 13739181

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

Patrice T

Обновил свой вопрос

2 Ответов

Рейтинг:
17

OriginalGriff

Вы можете выбрать один из двух вариантов:
1) Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

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

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

2) это не совсем так работает.
Мы не делаем вашу работу за вас.
Если вы хотите, чтобы кто - то написал ваш код, вы должны заплатить- я предлагаю вам пойти в Freelancer.com и спросите там.

Но знайте: вы получаете то, за что платите. Плати копейки, получай обезьян.

Идея "развития" заключается в следующем: "систематическое использование научно - технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".
Так что либо заплатите кому-нибудь за это, либо научитесь писать сами. Мы здесь не для того, чтобы делать это за вас.


Рейтинг:
0

Patrice T

Цитата:
я также написал код. но он не работает.

Прежде всего, забудьте об оптимизации и найдите, что не так в вашем коде.
Медленный код, который является правильным, лучше, чем быстрый код, который не является правильным.
Сказал иначе: сделайте это правильно, прежде чем делать это быстро.
-----
Отладка:
Цитата:
но он не работает.

Я не вижу ничего очевидного в вашем коде, просто ваше использование const мне это кажется странным.

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Обратная сторона этого решения:
- Это DIY, вы один отслеживаете проблему и находите ее корни, которые ведут к решению.
Положительная сторона этого решения:
- Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.

Вторичное воздействие
- Вы будете гордиться тем, что сами находите Жуков.
- Ваши навыки обучения улучшатся.

Вы должны довольно быстро найти, что не так.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
-----
Оптимизация:
Очередь настолько проста, что там очень мало места для оптимизации.
Когда вы думаете об оптимизации, вам нужно изучить алгоритм, который вы хотите оптимизировать, и альтернативы irs. Хорошее знание алгоритмов-это большое подспорье.
Очередь (абстрактный тип данных) - Википедия[^]
существует инструмент, который может помочь вам оптимизировать код, его название таково профилировщик, это поможет вам определить, где ваш код тратит время. Это поможет вам увидеть, является ли оптимизация эффективной или нет.
Профилирование (компьютерное программирование) - Википедия[^]
Единственная оптимизация, которую я вижу, включена
back_idx = (back_idx + 1) % MAX;

Процент стоил столько же, сколько деление. Более эффективно проверить, достиг ли back_idx максимума, и в этом случае сбросить его до нуля.
Эта оптимизация очень мала и ничего не изменит во время ее выполнения.