Untitled

 avatar
unknown
csharp
2 years ago
4.9 kB
6
Indexable
namespace Lista_jakas_nowa
{
    public class ElementListy2D
    {

        private int Wartość; // Wartość do zapamiętania
                             //jak dwukietunkowa musi miec referencje na lewo i na prawo
        private ElementListy2D Poprzedni;
        private ElementListy2D Następny;

        public ElementListy2D (int x)
        {

            Wartość = x;
            Poprzedni = null;
            Następny = null;

        }//Koniec konstruktora

        public void DodajDoKońca(int x)
        {

            if(Następny == null)
            {
                Następny = new ElementListy2D(x, this);

            }
            else
            {
                Następny.DodajDoKońca(x);
            }//endif
        }//Koniec dopisywania do końca listy

        public ElementListy2D(int x, ElementListy2D poprzednik)
        {
            

            Wartość = x;
            Poprzedni= poprzednik;
            Następny = null;

        }//koniec drugiego konsturktora

        public void PokażListęOdPrzodu()
        {
            Console.Write(Wartość);
            if(Następny==null)
            {
                Console.WriteLine();
            }
            else
            {
                Console.Write(", ");
                Następny.PokażListęOdPrzodu();
            }//koniec if
        }//Koniec pokazywania od przodu

        // DO tyłu trzeba wykożystać poprzedniki a nie długość listy


        public void PokażListęOdTyłu(ElementListy2D ogon)
        {
            if(ogon == null)
            {
                Console.WriteLine("Nie podano ostatgniego elementu listy");
            }
            else
            {
                Console.Write(Wartość);
                if (Poprzedni == null)
                {
                    Console.WriteLine() ;
                }
                else
                {
                    Poprzedni.PokażListęOdTyłu(Poprzedni);

                }//endif
            }//endif
        }//koniec pokazywania listy do tyłu

        public ElementListy2D getOgonIteracyjnie()
        {
            ElementListy2D wynik;

            wynik = this;
            while(wynik.getNastępnik() != null) 
            {
                wynik=wynik.getNastępnik();
            }

            return wynik;
        }

        protected ElementListy2D getNastępnik()
        {
            return Następny;
        }


        public ElementListy2D getOgonRekurencyjnie()
        {
            ElementListy2D wynik;
            wynik = null;

            if(Następny != null)
            {
                wynik=Następny.getOgonRekurencyjnie();
            }
            else
            {
                wynik=this;
            }//endif
            return wynik;
        }//Koniec getOgonRekurencyjnie

        public bool Sprawdź(int x)
        {
            bool wynik;
            wynik = Wartość == x;
            if(wynik == false)
            {
                if(Następny!= null)
                {
                    wynik=Sprawdź(x);
                }//endif
            }//endif

            return wynik;
        }//Koniec wyszukiwania

        public void UsunListe()
        {
            Poprzedni = null;
            if(Następny!=null)
            {
                Następny.UsunListe();

            }//endif
            Następny= null;
        }//Koniec usuwania listy
    }//Koniec listy

    //Rekurencyjnie nie musze łamac Hermetyzacji
    static public class TestyListy2D
    {
        static void Main(string[] args)
        {
            Random generator;
            int Ile;
            ElementListy2D głowa;
            ElementListy2D ogon;
            int szukana_wartosc;
            int i;
            Ile = 20;
            int x;
            szukana_wartosc = 5;
            generator = new Random();
            głowa = null;
            ogon = null;

            for(i = 9; i< Ile; i++)
            {
                x = generator.Next(Ile);
                if (głowa == null)
                {
                    głowa = new ElementListy2D(x);
                }
                else
                {
                    głowa.DodajDoKońca(x);
                }//endif
            }
            Console.WriteLine("Lista od początku: ");
            głowa.PokażListęOdPrzodu();

            ogon = głowa.getOgonIteracyjnie();
            Console.WriteLine("Lista od końca, ogon - iteracyjnie");
            głowa.PokażListęOdTyłu(ogon);

            ogon = głowa.getOgonRekurencyjnie();
            Console.WriteLine("Lista od końca, ogon - rekurencyjnie");
            głowa.PokażListęOdTyłu(ogon);
            Console.ReadKey();
        }
    }
}
Editor is loading...
Leave a Comment