Вставка в массив элемента, который встает на определенную позицию не нарушая упорядоченности - 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++;
}

Объяснение кода листинга программы

В данном коде происходит вставка элемента в массив, который стоит перед определенной позицией, при этом не нарушается упорядоченность массива.

  1. for(int i=(list->cnt-1);i>=pos+1;i--) - в данном цикле происходит перебор элементов массива, начиная с последнего элемента и заканчивая элементом, стоящим на позиции pos+1. Переменная i уменьшается на каждой итерации цикла.
  2. list->val[i+1]=list->val[i]; - в данной строке происходит перенос значения элемента массива, стоящего на позиции i в элемент массива, стоящий на позиции i+1. Это необходимо для того, чтобы вставка нового элемента не нарушала упорядоченность массива.
  3. list->val[pos+1]=elem; - в данной строке происходит вставка нового элемента elem в массив на позицию pos+1.
  4. list->cnt++; - в данной строке увеличивается счетчик количества элементов в массиве на единицу. Это необходимо для корректного отображения количества элементов в массиве после вставки нового элемента.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы