Доброго времени суток.
мне нужно найти в двусвязном списке элемент с минимальным значением ключа и заменить его на новый.
Пока создал только односвязной список и нахожу его минимальный элемент.
Как правильно сдвигать и отображать это в 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 извиняйте за простыню