Untitled
unknown
plain_text
2 years ago
7.2 kB
10
Indexable
using System;
class Program
{
private class ElementListy
{
public double Wartość { get; private set; }
public ElementListy Następny { get; set; }
public ElementListy(double x)
{
Wartość = x;
Następny = null;
}
public void Usuń()
{
if (Następny != null)
{
if (Następny.Następny != null)
{
Następny.Usuń();
}
Następny = null;
}
}
public bool Szukaj(double x)
{
bool wynik = false;
if (Wartość == x)
{
wynik = true;
}
if (!wynik && Następny != null)
{
wynik = Następny.Szukaj(x);
}
return wynik;
}
public void Dopisz(double x)
{
if (Następny == null)
{
Następny = new ElementListy(x);
}
else
{
Następny.Dopisz(x);
}
}
}
private class ListaJednokierunkowa
{
private ElementListy głowa;
public ListaJednokierunkowa()
{
głowa = null;
}
public void DodajNaPoczątek(double wartość)
{
ElementListy nowyElement = new ElementListy(wartość);
nowyElement.Następny = głowa;
głowa = nowyElement;
}
private ElementListy DodajNaPoczątekRekurencyjnie(ElementListy obecny, double wartość)
{
if (obecny == null)
{
return new ElementListy(wartość);
}
obecny.Następny = DodajNaPoczątekRekurencyjnie(obecny.Następny, wartość);
return obecny;
}
public void Wyświetl()
{
WyświetlRekurencyjnie(głowa);
Console.WriteLine("null");
}
private void WyświetlRekurencyjnie(ElementListy obecny)
{
if (obecny != null)
{
Console.Write($"{obecny.Wartość} -> ");
WyświetlRekurencyjnie(obecny.Następny);
}
}
public void Usun(double wartość)
{
głowa = UsunRekurencyjnie(głowa, wartość);
}
public void Dopisz(double wartość)
{
if (głowa == null)
{
głowa = new ElementListy(wartość);
}
else
{
głowa.Dopisz(wartość);
}
}
private ElementListy UsunRekurencyjnie(ElementListy obecny, double wartość)
{
if (obecny == null)
{
return null;
}
if (obecny.Wartość.Equals(wartość))
{
ElementListy pomocniczy = obecny.Następny;
obecny = null;
return pomocniczy;
}
if (obecny.Następny != null && obecny.Następny.Wartość.Equals(wartość))
{
if (obecny.Następny.Następny == null)
{
obecny.Następny = null;
}
else
{
obecny.Następny = obecny.Następny.Następny;
}
return obecny;
}
if (obecny.Następny != null && obecny.Następny.Wartość.Equals(wartość))
{
if (obecny.Następny.Następny != null)
{
ElementListy pomocniczy = obecny.Następny;
obecny.Następny = obecny.Następny.Następny;
pomocniczy = null;
}
}
obecny.Następny = UsunRekurencyjnie(obecny.Następny, wartość);
return obecny;
}
public void Usuń()
{
if (głowa != null)
{
głowa.Usuń();
głowa = null;
}
}
public bool Szukaj(double x)
{
if (głowa != null)
{
return głowa.Szukaj(x);
}
return false;
}
public void Sortuj()
{
głowa = SortujRekurencyjnie(głowa);
}
private ElementListy SortujRekurencyjnie(ElementListy lista)
{
if (lista == null || lista.Następny == null)
return lista;
ElementListy posortowanaLista = null;
ElementListy obecny = lista;
while (obecny != null)
{
ElementListy następny = obecny.Następny;
posortowanaLista = Wstaw(posortowanaLista, obecny);
obecny = następny;
}
return posortowanaLista;
}
private ElementListy Wstaw(ElementListy posortowanaLista, ElementListy nowyElement)
{
if (posortowanaLista == null || posortowanaLista.Wartość >= nowyElement.Wartość)
{
nowyElement.Następny = posortowanaLista;
return nowyElement;
}
ElementListy obecny = posortowanaLista;
while (obecny.Następny != null && obecny.Następny.Wartość < nowyElement.Wartość)
{
obecny = obecny.Następny;
}
nowyElement.Następny = obecny.Następny;
obecny.Następny = nowyElement;
return posortowanaLista;
}
}
static void Main(string[] args)
{
ListaJednokierunkowa lista = new ListaJednokierunkowa();
lista.DodajNaPoczątek(3.5);
lista.DodajNaPoczątek(2.2);
lista.DodajNaPoczątek(1.1);
Console.WriteLine("Lista jednokierunkowa przed usunięciem:");
lista.Wyświetl();
double elementDoUsunięcia = 2.2;
Console.WriteLine($"\nUsuwam element {elementDoUsunięcia}");
lista.Usun(elementDoUsunięcia);
Console.WriteLine("\nLista jednokierunkowa po usunięciu:");
lista.Wyświetl();
double szukanaWartość = 3.5;
Console.WriteLine($"\nCzy lista zawiera wartość {szukanaWartość}: {lista.Szukaj(szukanaWartość)}");
szukanaWartość = 4.5;
Console.WriteLine($"\nCzy lista zawiera wartość {szukanaWartość}: {lista.Szukaj(szukanaWartość)}");
double nowaWartość = 4.4;
Console.WriteLine($"\nDopisuję wartość {nowaWartość} na koniec listy:");
lista.Dopisz(nowaWartość);
lista.Wyświetl();
Console.WriteLine("\nSortowanie listy:");
lista.Sortuj();
lista.Wyświetl();
Console.WriteLine("\nUsuwanie całej listy z pamięci:");
lista.Usuń();
lista.Wyświetl();
Console.ReadKey();
}
}
Editor is loading...
Leave a Comment