Задание следующее, это внедрить в текущую очередь новую переменную с приоритетом. То есть я сделал так что бы задались числа 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;
}
Поскольку ваша структура данных реализована как массив, то единственный способ - сдвинуть элементы путем копирования. То есть перед тем, как делать вставку, надо для всех элементов, начиная с последнего элемента и до позиции вставки (то есть, идем в обратном порядке), выполнить что-то вроде:
head[i+1] = head[i];
Но, учитывая, что у вас там простые int'ы, можно использовать функции типа memmove, которые делают то же самое, но оптимизированы.
А вообще для структур, реализующих операции вставки, массив - не подходящая основа.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Зависает GUI при изменении QProgressBar из QThread с помощью сигналов
Здравствуйте! Пытаюсь установить YouCompleteMe для подсказок в Vim