LINUX.ORG.RU

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

 ,


1

2

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

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

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



Последнее исправление: cetjs2 (всего исправлений: 2)

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

ok

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

делай сразу двусвязный

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

вот тут ты меня потерял. Какие-то гриды?

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

string grid - стандартный компонент ide
можно и обычным cout<< выводить

делай сразу двусвязный

добавить в

struct number{
number *next;  //вперёд 
number *previous; // назад
а потом как его заполнять и ходить по нему ?

student_Cc
() автор топика
Ответ на: комментарий от student_Cc

а потом как его заполнять и ходить по нему ?

У меня встречный вопрос: почему ты идёшь с этим на форум, вместо того чтобы открыть любой учебник с готовым кодом?

http://bit.ly/18WUpPX

anonymous
()

int oklad

oklad

Ох, ё.

отображать это в string grid

А туда ли ты зашел, парниша?

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

а хз не нагуглил ещё нужного

anonymous
()

это ты правильно , вместо сразу какой то двухсвязный список воять на полях левый правый сосед или предыдущий последующий ТЫ как настоящий ... воспользовался однонаправленным односвязным списком.

теперь осталось подкоректировать однонаправленный список в http://ru.wikipedia.org/wiki/XOR-связный_список

и телемаркет - у тебя двунаправленный список.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

и телемаркет - у тебя двунаправленный список

Ага, препод офигеет и сразу поставит зачет за находчивость.

no-such-file ★★★★★
()
Ответ на: комментарий от qulinxao

и телемаркет - у тебя двунаправленный список.

И невозможность собирать мусор автоматически. Трололо.

anonymous
()

Двусвязной

это по типу как «запасный выход»(устар.)? Боярское программирование :)

slackwarrior ★★★★★
()
Ответ на: комментарий от qulinxao

и телемаркет - у тебя двунаправленный список

Занятно, не знал про такое...

solovey ★★
()
Ответ на: комментарий от flareguner

Не. Это надо вписать в Rules of engagement и убивать пионеров за отступы от... Rules of engagement :) «Тут так принято и баста» :)

slackwarrior ★★★★★
()
Ответ на: комментарий от anonymous

если сборщик учитывает такие виды производных типов от ссылок полей (т.е наличие 3тройки где 2 значения реальные ссылки , а 3 их «разность» , и наличие «ораклов» которые по любой паре из этой тройки востанавливает третье) то сборка мусора автоматична как всегда.

ну и тут не до сборки мусора , личинки научаются ручному закату солнца.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

личинки научаются ручному закату солнца.

LOL. Записал в блокнотик.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.