Insert-sort na liście dwukierunkowej
Ostatnio zmodyfikowano 2014-04-22 13:40
janiu Temat założony przez niniejszego użytkownika |
Insert-sort na liście dwukierunkowej » 2014-04-22 13:40:06 Witam ! Chciałem napisać program który sortuje listę dwukierunkową. Mój kod działa poprawnie z wyjątkiem jednej sytuacji gdy pierwszy element jest największy i nie potrafię znaleźć błędu mógłby mi ktoś pomóc ? #include <iostream>
using namespace std;
struct node { node * next; node * back; int value; };
void add_start( node *& head, int x ) { node * temp = new node; temp->value = x; temp->next = head; head->back = temp; temp->back = NULL; head = temp; }
void show_list( node * head ) { node * temp = head; while( temp ) { cout << temp->value << "\t"; temp = temp->next; } } void sort( node *& head ) { node * temp = head->next; node * pom = head; node * wsk = head->next; while( wsk != NULL ) { temp = wsk; pom = temp->back; wsk = temp->next; if( pom->value > temp->value ) { if( wsk == NULL ) { pom->next = wsk; } else { pom->next = temp->next; wsk->back = pom; } } while( pom->value > temp->value ) { if( pom->back == NULL ) { if( pom->value > temp->value ) { temp->next = pom; pom->back = temp; head = temp; temp->back = NULL; } } else { pom = pom->back; } if( pom == temp ) { break; } } if( pom->value <= temp->value && pom != temp ) { temp->next = pom->next; temp->back = pom; pom->next = temp; } } }
int main() { node * head = new node; head->next = NULL; head->value = 1; head->back = NULL; add_start( head, 1 ); add_start( head, 2 ); add_start( head, 3 ); add_start( head, 1 ); head->back = NULL; show_list( head ); sort( head ); cout << endl; show_list( head ); cout << endl << endl; system( "PAUSE" ); }
|
|
« 1 » |