Очередь в сpp, вывод простых чисел

270
07 октября 2017, 21:14

Задание следующее, это внедрить в текущую очередь новую переменную с приоритетом. То есть я сделал так что бы задались числа 2,3,4,5,6,7,8,9,10,11,12. И с помощью s.Prior_enq(71,7) указал что число 71 будет пойдет приоритетом на место 7-го элемента.Вопрос заключается как сдвинуть остальные элементы вниз на один, что бы получилось вот так 2,3,4,5,6,71,7,8,9,10,11,12. А не как у меня получается в данный момент 2,3,4,5,6,71,8,9,10,11,12,7.

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Queue
{
private:
    int* head;
    int Max;
    int index;
    int f;
    int nomer;
public:
    Queue(int);
    ~Queue();
    void Enqueue(int);
    int Dequeue();
    void Prior_enq(int,int);
};
Queue::Queue(int sizze)
{
    Max = sizze;
    index=0;
    f=0;
    head = new int[Max];
 }
Queue::~Queue(){delete [] head;}
void Queue::Enqueue(int elem)
{
        head[index++] = elem;
}
int Queue::Dequeue()
{
    return head[f++];
}
void Queue::Prior_enq(int elem, int nomer)
{
    int ff=0;
    ff=head[nomer];
    head[nomer]= elem;
    head[index++]= ff;
}
int main()
{
    int k=0,i,j,v=5,el;
    bool pointer;
    cout << "\t\t My variant = 5" << endl;
    el=(5*5)+50;
    Queue s(el);
    int n;
    srand(time(NULL));
    for(i=1; i<12; i++) //присваивание переменных очереди
    {
        cout<< "Zadanie random choisla = " << i+1 << endl;
        s.Enqueue(i+1);
    }
    s.Prior_enq(71,7); // приорететная очередь
     for(i=1; i<13; i++)  // вывод всех чисел
    {
        cout << s.Dequeue()<< endl;
        }
    /* for(i=0; i<14;i++) // нахождение простых чисел
    {
        k=s.Dequeue();
        pointer=true;
        for (j=2; j<k; j++)
        {
            if (!(k%j)) { pointer=false; break;}
        }
        if (pointer==true) cout<<"Prostoe chislo = " << k << endl;
    }*/
    getch();
    return 0;
}
Answer 1

Поскольку ваша структура данных реализована как массив, то единственный способ - сдвинуть элементы путем копирования. То есть перед тем, как делать вставку, надо для всех элементов, начиная с последнего элемента и до позиции вставки (то есть, идем в обратном порядке), выполнить что-то вроде:

head[i+1] = head[i];

Но, учитывая, что у вас там простые int'ы, можно использовать функции типа memmove, которые делают то же самое, но оптимизированы.

А вообще для структур, реализующих операции вставки, массив - не подходящая основа.

READ ALSO
Ошибка, я тупой не понял что не так

Ошибка, я тупой не понял что не так

Всем привет, нужна помощьвот код

277
Зависание GUI при изменении QProgressBar из QThread с помощью сигналов

Зависание GUI при изменении QProgressBar из QThread с помощью сигналов

Зависает GUI при изменении QProgressBar из QThread с помощью сигналов

323
Ошибка в cstdio (нет fgetpos и fsetpos)

Ошибка в cstdio (нет fgetpos и fsetpos)

Здравствуйте! Пытаюсь установить YouCompleteMe для подсказок в Vim

403