Вставка в массив элемента, который встает на определенную позицию не нарушая упорядоченности - C (СИ)
Формулировка задачи:
переделав свой раньше не работающий многострадальный код(написав прогу сам не используя код из методички) столкнулся с проблемой.
надо записывать элементы упорядоченно т.е. ввели элемент(сосчитали с файла) и он должен занять нужное место среди уже вставленных.
как делал.вводился элемент.если список последовательного хранения пуст - просто записать элемент иначе
искал элемент который меньше моего и вставлял перед ним.НО!дальше первого введенного элемента ничего не добавляется.
вот сообственно 2 эти функции
где что-то не так с циклами наверное.
void Vstavka(spisok *list,int pos,bilet elem)//перед текущим { if ((pos<0)||(pos>(list->cnt))) return; if (list->cnt==0) { list->val[list->cnt]=elem; list->cnt++; return; } for(int i=(list->cnt-1);i>=pos+1;i--)//Вставка элемента перед { list->val[i+1]=list->val[i]; list->val[pos+1]=elem; list->cnt++; } } void Addup(bilet elem,spisok *list)//вставка перед элементом меньшим { if (list->cnt==0) { list->val[list->cnt]=elem; list->cnt++; } else { for(int i=list->cnt;i<list->cnt;i++) { if (list->val[i].Red<elem.Red) Vstavka(list,i,elem); } } }
Решение задачи: «Вставка в массив элемента, который встает на определенную позицию не нарушая упорядоченности»
textual
Листинг программы
for(int i=(list->cnt-1);i>=pos+1;i--)//Вставка элемента перед { list->val[i+1]=list->val[i]; list->val[pos+1]=elem; list->cnt++; }
Объяснение кода листинга программы
В данном коде происходит вставка элемента в массив, который стоит перед определенной позицией, при этом не нарушается упорядоченность массива.
for(int i=(list->cnt-1);i>=pos+1;i--)
- в данном цикле происходит перебор элементов массива, начиная с последнего элемента и заканчивая элементом, стоящим на позицииpos+1
. Переменнаяi
уменьшается на каждой итерации цикла.list->val[i+1]=list->val[i];
- в данной строке происходит перенос значения элемента массива, стоящего на позицииi
в элемент массива, стоящий на позицииi+1
. Это необходимо для того, чтобы вставка нового элемента не нарушала упорядоченность массива.list->val[pos+1]=elem;
- в данной строке происходит вставка нового элементаelem
в массив на позициюpos+1
.list->cnt++;
- в данной строке увеличивается счетчик количества элементов в массиве на единицу. Это необходимо для корректного отображения количества элементов в массиве после вставки нового элемента.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д