Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Сортировка однонаправленных списков



Для ускорения поиска информации в списке обычно при выводе данных список упорядочивают (сортируют) по ключу.

Проще всего использовать метод сортировки, основанный на перестановке местами двух соседних элементов, если это необходимо. Существует два способа перестановки элементов: обмен адресами и обмен информацией.

1. Первый способ – перестановка адресов двух соседних элементов, следующих за элементом с известным указателем. Первый элемент стека в этом случае не сортируется. Для того чтобы и первый элемент оказался отсортированным, следует перед обращением к функции сортировки добавить один (любой) элемент в стек, а после сортировки – удалить его.

Функция сортировки для этого случая имеет вид

void Sort_p(Stack **p) {

Stack *t = NULL, *t1, *r;

if ((*p) -> next -> next == NULL) return;

do {

for (t1=*p; t1-> next->next!= t; t1=t1-> next)

if (t1->next->info > t1-> next-> next-> info){

r = t1->next->next;

t1 -> next -> next = r -> next;

r-> next =t1-> next;

t1-> next = r;

}

t= t1-> next;

} while ((*p)-> next -> next!= t);

}

Обращение к этой функции Sort_p(&begin);

2. Второй способ – обмен информацией между текущим и следующим элементами. Функция сортировки для этого случая будет иметь вид

void Sort_info(Stack *p) {

Stack *t = NULL, *t1;

int r;

do {

for (t1=p; t1 -> next!= t; t1 = t1-> next)

if (t1-> info > t1-> next -> info) {

r = t1-> info;

t1-> info = t1-> next -> info;

t1-> next -> info = r;

}

t = t1;

} while (p -> next!= t);

}





Дата публикования: 2015-02-22; Прочитано: 270 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...