Официальный сайт студ.городка НГТУ
Программирование и БД » Сортировка односвязного списка на С 

#1  07.02.06 01:00

Сортировка односвязного списка на С

Помогите, pls. Я уже глючу, наверное  - не могу написать сортировку.
Значит так. Дана структура:

Код: cpp:

struct TERM_LIST{   
	char Termin[30];        //Слово
	struct TERM_LIST *next;
	//struct TERM_LIST *prev;  этот элемент лучше не использовать, 
      //хотя если понадобится, то можно включить 
};
 

В список заносим слова. Теперь список надо отсортировать так, чтобы эти слова  располагались в алфавитном порядке. Возможны любые виды сортировок. В особенности, хотелось бы посмотреть на сортировку пузырьком.
P.S.:увидеть решение этой проблемы как можно скорее, а то скоро уже с ума сойду   :D . Все это под Винду.

Offline

#2  07.02.06 18:55

Re: Сортировка односвязного списка на С

вот что думает по этому поводу Романов Е.Л.
http://ermak.cs.nstu.ru/cprog/book2001/306-02.htm#def32

Код: cpp:

//------------------------------------------------------306-07.cpp
 
//--- Сортировка односвязного списка вставками
 
list *sort(list *ph)      // функция возвращает заголовок нового списка
 
{ list *q, *out, *p , *pr;
 
out = NULL;                                     // выходной список пуст
 
while (ph !=NULL)                        // пока не пуст входной список
 
     { q = ph; ph = ph->next;                    // исключить очередной
 
                                               // поиск места включения
 
     for ( p=out,pr=NULL; p!=NULL && q->val>p->val; pr=p,p=p->next);
 
     if (pr==NULL) / / включение перед первым
 
          { q->next=out; out=q; }
 
     else                                    // иначе после предыдущего
 
          { q->next=p; pr->next=q; }
 
     }
 
return out; }


только нужно заменить условие
q->val > p->val 
на
strcmp(q->Termin, p->Termin) >0 или <0, в зависимости от типа сортировки (по возрастанию или убыванию)

Offline

Программирование и БД » Сортировка односвязного списка на С 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.584 сек.
Выполнено 11 запросов.