Skocz do zawartości


Zdjęcie

[c++] Lista dwukierunkowa i sortowanie przez wstawianie


  • Zamknięty Temat jest zamknięty
3 odpowiedzi w tym temacie

#1 Kazeeny

Kazeeny

    Stały użytkownik

  • 209 postów

Napisano 27 10 2008 - 21:51

hej. mam do napisania program, ktory realizuje rozwiazanie problemu: Posortuj 10 wylosowanych liczb z przedziału 1-100 poprzez metodę sortowania przez wstawianie, wykorzystując do tego listę dwukierunkowa

na razie napisalam coś takiego:
#include <iostream>using namespace std;struct lista //struktura dla listy dwukierunkowej{ int liczba;//element listy  struct lista *poprzedni;//wskazuje na poprzedni element listy  struct lista *nastepny;//wskazuje na nastepny element listy};int main()//bezparametrowa funkcja główna{ struct lista *glowa;//pierwszy element listy  struct lista *temp;//struktura potrzebna do uzupełniania liczby  struct lista *nowy;//struktura pomocnicza  struct lista *pomocniczy;//struktura pomocnicza  int i=0;//zmienna pomocnicza do pętli DO-WHILE  int n=10;//ilość elementów listy  glowa=new struct lista;//tworzenie pierwszego elementu listy  glowa->nastepny=NULL;  glowa->poprzedni=NULL;  temp=new struct lista;  nowy=new struct lista;  srand(time(NULL)); //inicjacja funkcji generowania liczb losowych  cout << "Program porzadkuje 10 wylosowanych liczb w kolejnosci rosnacej";  cout << " korzystajac z listy dwukierunkowej oraz metody sortowania przez";  cout << " wstawianie. Zostanie wyswietlona nieposortowana lista. Na koncu";  cout << " zostanie wyswietlona posortowana lista.\n\n";  //Uzupełnianie listy liczbami losowymi:  do  {    nowy=new struct lista;    temp=new struct lista;    nowy->liczba=1+rand()%100;    nowy->nastepny=NULL;    temp=glowa;    while(temp->nastepny!=NULL) temp=temp->nastepny;    temp->nastepny=nowy;    nowy->poprzedni=temp;    i++;  }  while(i<n);  cout << "Nieposortowana lista: \n";  temp=glowa->nastepny;  for(int i=0;i<n;i++) ///wyświetlanie nieposortowanej listy  { cout << temp->liczba << " ";    if(temp->nastepny!=NULL) temp=temp->nastepny;  }  //Sortowanie (niedokończone)  for(int i=0; i<n; i++)  { pomocniczy=new struct lista;    nowy=new struct lista;    nowy=temp;    pomocniczy=temp->poprzedni;    //while()    if(temp->nastepny!=NULL) temp=temp->nastepny;        }  temp=glowa->nastepny;  for(int i=0;i<n;i++) ///wyświetlanie posortowanej listy  { cout << temp->liczba << " ";    if(temp->nastepny!=NULL) temp=temp->nastepny;  }  cout << "\n\nDziekuje, program zakonczyl dzialanie...\n\n";  system("pause");  return 0;}

Problem z programem:
1. Coś mam nie tak zaimplementowaną listę, bo w głowie siedzą śmieci
2. nie mam pojęcia, jak tutaj zaimplementować algorytm sortowania przez wstawianie

  • 0

#2 suchoparek

suchoparek

    Obserwator

  • 8 postów

Napisano 23 11 2008 - 03:33

niepotrzebna jest ta linia (wyciek pamieci):
temp=new struct lista;
bo zaraz potem robisz:
temp=glowa;

w 'glowa' nie ustawiasz zadnej wartosci, jedynie wskazniki na sasiadow:
glowa=new struct lista;//tworzenie pierwszego elementu listy
glowa->nastepny=NULL;
glowa->poprzedni=NULL;

sortowanie najpierw napisz na tablicach, potem przerobic to juz latwo - zamieniasz przejscia z tablicowego typu na wskaziki listy

i wrzuc wszystkie powtarzajace sie operacje do oddzielnych funkcji, bedzie czytelniej

  • 0

#3 Kazeeny

Kazeeny

    Stały użytkownik

  • 209 postów

Napisano 23 11 2008 - 13:39

Już jakiś czas temu rozwiązałam to zadanie, ale dzięki za pomoc :D
  • 0

#4 suchoparek

suchoparek

    Obserwator

  • 8 postów

Napisano 23 11 2008 - 14:01

nie spojrzałem na datę, faktycznie post nie całkiem nowy :D

  • 0

Zobacz więcej tematów z tagiem: język C++



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych