LINUX.ORG.RU

Избранные сообщения student_Cc

Двусвязной список

Форум — Development

Доброго времени суток. мне нужно найти в двусвязном списке элемент с минимальным значением ключа и заменить его на новый.

Пока создал только односвязной список и нахожу его минимальный элемент.

Как правильно сдвигать и отображать это в string grid`е ? Основной Фрагмент кода, только вместо удаления элемента я пытаюсь сделать сдвиг элементов на 1 позицию

struct number{
..
    int oklad;
..
    number *next;
    }sts[N],*phead, *last, *r; //phead - голова списка, last - хвост, r - текущий элемент
..
some funk()
 {
..
    for (int i = 0; i < n; i++)
        {
            if (phead)
                {
                    last->next = new (number);
                    last = last->next;
                    last->next = NULL;
                    }                                  //если список НЕ пустой
            else
                {
                    phead = new (number);
                    phead->next = NULL;
                    last = phead;
                }                                   //если список пустой
            last->oklad = sts[i].oklad;             //случайное число от 0 до 20
        }


    r = phead;
    int min = r->oklad;
    int pos;
 //   while (r)
       for (int i=0;r;i++)
       {
            if (r->oklad < min)
              {
               min = r->oklad;

              pos = i;

               }
            //  cout<<r->oklad;
              r = r->next;

        }
  //  StringGrid1->Cells[1][pos]=sts[pos+1].oklad;

     Label2->Caption=min;
    r = phead;
    number *next = r->next;
    number *tmp;

if (!phead->next->next)
{
    if (phead->next->oklad == min)
        {
            delete last;
            phead->next = NULL; 
         //   cout << phead->oklad;
          StringGrid1->Cells[1][pos]=sts[pos+1].oklad;
         return;
        }
    if (phead->oklad == min)
        {
        delete phead;
        phead = last;
      //  cout << phead->oklad;
       StringGrid1->Cells[1][pos]=sts[pos+1].oklad;
       return ;
        }
}//проверяем если в списке два элемента

    while (next->next)
        {
            if (next->oklad == min)
            {

                tmp = next;
                r->next = next->next;
                delete tmp;
                StringGrid1->Cells[1][pos]=sts[pos].oklad;

            }
            r = r->next;
            next = r->next;
        }
        //удаляем минимальный элемент из списка

    r = phead;
    while (r)
    {

        for (int i = 0; i < n; i++)
          if (i==pos)
          {

         // StringGrid1->Cells[1][i]=sts[i];

       // StringGrid1->Cells[1][pos]=sts[i+1].oklad;
           }

        r = r->next;
    }
}

p.s извиняйте за простыню

 ,

student_Cc
()