Сортировка структуры или что-то в этом роде
Представим, что у меня есть массив структур следующего вида:
struct car
{
int number_car;
int viezd_car = 0;
};
void main(){
setlocale(LC_ALL, "ru");
srand(time(0));
int N = rand()%(100-0+1)+0;
int park_mest = rand() % (20 - 0 + 1) + 0;
car *car1=new car[N+park_mest];`
И мне из него нужно удалять по индексу сами объекты структур. Как лучше отразить то, что у меня по таким-то индексам есть незаполненная структура?
Я полагаю, что нужно каким-то образом сдвинуть влево по индексу все структуры, идущее после удалённой структуры, а потом эту свободную структуру добавить в конец массива. Но как тогда это корректно сделать?
Полный код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct car
{
int number_car;
int viezd_car = 0;
};
void main(){
setlocale(LC_ALL, "ru");
srand(time(0));
int N = rand()%(100-0+1)+0;
int park_mest = rand() % (20 - 0 + 1) + 0;
car *car1=new car[N+park_mest];
int variable;
do
{
cout << "Сейчас на парковке:" << N << " машин," << " доступно " << park_mest << " мест для стоянки." << endl;
cout << "Вы хотите выехать со стоянки или припарковать новую машину?" << endl;
cout << "1 - припарковать" << endl << "2 - выехать" <<endl<<"0 - выйти из стоянки"<< endl;
while (!(cin >> variable))
{
cout << "Введен неккоректный выбор варианта" << endl << endl;
cout << "Сейчас на парковке:" << N << " машин," << " доступно " << park_mest << " мест для стоянки." << endl;
cout << "Вы хотите выехать со стоянки или припарковать новую машину?" << endl;
cout << "1 - припарковать" << endl << "2 - выехать" << endl << "0 - выйти из стоянки" << endl;
cin.clear();
while (cin.peek() != '\n') cin.get();
}
if (variable!=1&& variable != 2 && variable != 0 )
{
cout << "Введен неккоректный выбор варианта" << endl << endl;
variable = 5;
}
switch (variable)
{
case 1: {
if (park_mest!=0)
{
car1[N + 1].number_car = N + 1;
cout << endl << "Вы припарковали машину, номер вашей машины: " << N + 1 << endl;
cout << endl << endl;
park_mest -= 1;
N += 1;
}
else
{
cout << "Доступные стоянки закончились, припарковаться не где :(" << endl<<endl;
}
break;
}
case 2: {
break;
}
case 0: {
cout << "Приезжайте еще! :)" << endl;
break;
}
}
} while (variable!=0);
delete []car1;
}
Ответы (1 шт):
а чтобы выехать машине 5 нужно что 1234 ее пропустили и вернулись обратно
Для этой задачи (насколько я её понял) прекрасно подойдут два стека. Это укладывается в суть предмета "алгоритмы и структуры данных"
На запрос "выехать машине X" перекладываете вершину основного стека в дополнительный, пока не встретите X
. Потом, чтобы загнать машины назад, делаете наоборот - перекладываете в основной стек, пока вспомогательный не кончится.
Стеки можно использовать готовые из STL std::stack
, или самому сделать на основе вектора (проще) или массива, если у вас именно так задано.