Witam,
mam na zadanie domowe z algorytmow posortowac liste jednokierunkowa, wiem ze wszedzie sa opisy jak to zrobic tylko wszystko w c++, a skoro sie srednio znam na programowaniu, mimo spedzonych wielu godzin nie moglem tego zrobic w c#.
Oto moja lista :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ListaJednokierunkowa
{
internal class Program
{
private static void Main(string[] args)
{
int s, i, xx;
int[] tablica;
List<int> lista = new List<int>();
Console.WriteLine("Podaj rozmiar/wielkość tablicy:");
string a;
a = Console.ReadLine();
s = int.Parse(a);
tablica = new int[s];
Random Generator = new Random();
ListaNaPoczątku DopisywanieNaPoczątku;
ElementListy DopisywanieNaKońcu;
Generator = new Random();
xx = Generator.Next(123);
DopisywanieNaPoczątku = new ListaNaPoczątku((double)xx);
DopisywanieNaKońcu = new ElementListy((double)xx);
for (i = 0; i < tablica.Length; i++)
{
tablica[i] = xx = Generator.Next(123);
DopisywanieNaPoczątku.DodajNaPoczątek((double)xx);
DopisywanieNaKońcu.Dopisz((double)xx);
}//next i
Console.WriteLine("\n Początkowa lista");
DopisywanieNaPoczątku.Korzeń.Wyświetl(false);
Console.WriteLine("\n\n\nLista zapisywana od końca:");
DopisywanieNaKońcu.Wyświetl(false);
DopisywanieNaPoczątku.UsuńListęZPamięci(); //Usuwanie listy z pamięci
DopisywanieNaKońcu.Usuń();
DopisywanieNaKońcu = null;
Console.ReadKey();
}
}
}
public class ListaNaPoczątku
{
public ElementListy Korzeń;
public ElementListy NowyElement;
//Konstruktor
public ListaNaPoczątku(double x)
{
Korzeń = new ElementListy(x);
NowyElement = null;
}//Koniec konstruktora
public void DodajNaPoczątek(double x)
{
NowyElement = new ElementListy(x);
NowyElement.Następny = Korzeń;
Korzeń = NowyElement;
}//Koniec dopisywania do początku listy
//Metoda usuwająca element z listy
public void UsuńElement(double x)
{
ElementListy Pomocniczy;
if (Korzeń.Wartość == x)
{
Pomocniczy = Korzeń.Następny;
Korzeń = null;//Usuwanie z pamięci!!!
Korzeń = Pomocniczy;
}
Korzeń.UsuńZListy(x); //Usuwa pozostałe elementy przechowujące wartość x
}//Koniec metody usuwającej element z listy
public void UsuńListęZPamięci()
{
Korzeń.Usuń();
Korzeń = null;
}//Koniec metody usuwającej listę z pamięci
}//Koniec klasy ListaNaPoczątku
public class ElementListy
{
public double Wartość;
public ElementListy Następny;
//Konstruktor
public ElementListy(double x)
{
Wartość = x; //Zapamiętanie
Następny = null; //Wskaźnik = null
}//Koniec konstruktora
//Metoda dopisująca do końca listy
public void Dopisz(double x)
{
if (Następny == null)
{
Następny = new ElementListy(x);
}
else
{
Następny.Dopisz(x);
}
}//Koniec metody dopisującej do końca listy
public bool Szukaj(double x)
{
bool wynik;
wynik = false; //Domyślna wartość!
if (Wartość == x) wynik = true;
if ((wynik == false) && (Następny != null))
{
wynik = Następny.Szukaj(x);
}
return wynik;
}//koniec metody szukającej
//Metoda do usuwania elementu ze środka i z końca listy
public void UsuńZListy(double x)
{
ElementListy Pomoc;
if (Następny != null)
{
if (Następny.Wartość == x)
{
if (Następny.Następny == null) //Usuwanie na końcu listy
{
Następny = null;
}
if (Następny.Następny != null) //Usuwanie w środku listy
{
Pomoc = Następny;
Następny = Następny.Następny;
Pomoc = null;//Usunięcie z pamięci!!
}//end if
}
if (Następny.Wartość != x)
{
Następny.UsuńZListy(x);
}//end if
}//end if
}//Koniec metody usuwającej ze środka i z końca listy
//Metoda usuwająca listę z pamięci RAM (zostaje tylko korzeń)
public void Usuń()
{
if (Następny != null)
{
if (Następny.Następny != null)
{
Następny.Usuń();
}
Następny = null;
}//end if
}//koniec metody usuwającej listę z pamięci
//Metoda wyświetlająca zawartość listy
public void Wyświetl(bool NastępnaLinia)
{
string Dodatek;
Dodatek = "";
if (NastępnaLinia == true) Dodatek = "\n";
Console.Write("" + Wartość + ", " + Dodatek);
if (Następny != null) Następny.Wyświetl(NastępnaLinia);
}//Koniec metody wyświetlającej zawartość listy
}//Koniec klasy ElementListy
Z prezentacji z wykladu poskladalem cos takiego:
using System;
namespace lista
{
public class ElementListy
{
private ElementListy NowyElement;
public double Wartość;
public ElementListy Następny;
public ElementListy(double x)
{
Wartość = x;
Następny = null;
}
}
private ElementListy Korzeń;
int i;
for(i = 0; i < Tablica.Lenght; i++)
{
if(i == 0)
Korzeń = new ElementListy(Tablica[0]);
}
public ElementListy Nowy;
if(x < Korzeń.Wartość)
{
Nowy = new ElementListy(x);
Następny = Korzeń;
Korzeń = Nowy;
Nowy = null;
}
public class ElementListy
{
public double Wartość;
public ElementListy Następny;
public ElementListy(double x)
{
Wartość = x;
Następny = null;
}
public void DopiszDoListy(double x)
if(this.Wartość < x)
{
if(this.Następny == null)Następny = new ElementListy(x);
else
{
if(Następny.Wartość < x) Następny.DopiszDoListy(x);
else
{
NowyElement = new ElementListy(x);
NowyElement.Następny = this.Następny;
Następny = NowyElement;
NowyElemed nt = null;
}
}
}
if(this.Wartość == x)
{
NowyElement = new ElementListy(x);
NowyElement.Następny = this.Następny;
this.Następny = NowyElement;
NowyElement = null;
}
Teraz nie wiem jak to poskladac w calosc i dopisac aby mi sortowalo ta liste, licze na wasza pomoc!
dzieki