Untitled
unknown
plain_text
2 years ago
6.9 kB
6
Indexable
using System;
class Program
{
public class ElementListy
{
public double Wartość;
public ElementListy Następny;
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; // Domyślna wartość!
if (Wartość == x)
{
wynik = true;
}
if (!wynik && Następny != null)
{
wynik = Następny.Szukaj(x);
}
return wynik;
}
public void Dopisz(double x) //dodawanie elementu na koniec listy
{
if (Następny == null)
{
Następny = new ElementListy(x);
}
else
{
Następny.Dopisz(x);
}
}
}
public 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;
}
// Usuwanie, gdy znaleziony element jest głową
if (obecny.Wartość.Equals(wartość))
{
ElementListy pomocniczy = obecny.Następny;
obecny = null; // Zwolnienie pamięci (opcjonalne, bo Garbage Collector zadba o to)
return pomocniczy;
}
// Usuwanie, gdy znaleziony element jest na końcu listy
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;
}
// Usuwanie, gdy znaleziony element jest wewnątrz listy
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; // Zwolnienie pamięci (opcjonalne)
}
}
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 class ListaNaPoczątku
{
public ElementListy Głowa;
public void Dodaj(double x)
{
ElementListy nowyElement = new ElementListy(x);
nowyElement.Następny = Głowa;
Głowa = nowyElement;
}
}
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("\nUsuwanie całej listy z pamięci:");
lista.Usuń();
lista.Wyświetl();
// Użycie klasy ListaNaPoczątku
ListaNaPoczątku listaPoczątkowa = new ListaNaPoczątku();
listaPoczątkowa.Dodaj(5.5);
listaPoczątkowa.Dodaj(4.4);
listaPoczątkowa.Dodaj(3.3);
Console.WriteLine("\nLista na początku:");
listaPoczątkowa.Głowa.Usuń(); // Usuwanie elementu z listy na początku
listaPoczątkowa.Głowa.Usuń(); // Usuwanie kolejnego elementu z listy na początku
lista.Wyświetl();
Console.ReadKey();
}
}
Editor is loading...
Leave a Comment