Example #1
0
        static void ProhodPrvniPosledni(Seznam s)
        // h) Napište funkci, která ve spojovém seznamu prohodí (pomocí odkazů, nikoliv výměnou hodot) první prvek a poslední prvek.
        {
            Seznam pracovni  = s;
            Seznam pracovni2 = s;
            int    prvni     = pracovni.data;
            int    posledni  = -1;

            while (pracovni != null)
            {
                if (pracovni.next == null)
                {
                    posledni = pracovni.data;
                }
                pracovni = pracovni.next;
            }
            Console.Write("Prohození posledního a prvního prvku spojového seznamu: ");
            pracovni2.data = posledni;
            while (pracovni2 != null)
            {
                if (pracovni2.next == null)
                {
                    pracovni2.data = prvni;
                }
                Console.Write(pracovni2.data + ", ");
                pracovni2 = pracovni2.next;
            }
            Console.WriteLine();
        }
Example #2
0
        static void ObratPoradi(Seznam s)
        // f) Napište funkci, která obrátí pořadí prvků ve spojovém seznamu (za použití jednoho průchodu spojovým seznamem)
        {
            Seznam pracovni          = s;
            Seznam pracovni2         = s;
            int    pocetPrvkuSeznamu = 0;

            while (pracovni != null)
            {
                pocetPrvkuSeznamu++;
                pracovni = pracovni.next;
            }
            int[] novy = new int[pocetPrvkuSeznamu];
            int   i    = pocetPrvkuSeznamu - 1;

            while (pracovni2 != null)
            {
                novy[i] = pracovni2.data;
                i--;
                pracovni2 = pracovni2.next;
            }
            Seznam noveS = ConvertArray(novy);

            Console.Write("Obrácené pořadí prvků ve spojovém seznamu: ");
            while (noveS != null)
            {
                Console.Write(noveS.data + ", ");
                noveS = noveS.next;
            }
            Console.WriteLine();
        }
Example #3
0
        }                                   //
        static Seznam Create(int n)         //
        {                                   //
            Seznam vys = new Seznam();      //

            vys.data = n;                   //
            vys.next = null;                //
            return(vys);                    //
        }                                   //
Example #4
0
        static Seznam Zacatek(Seznam s, int n)
        {
            Seznam tmp = Novy(n);

            tmp.next = s;
            s.prev   = tmp;
            return(tmp);
        }
Example #5
0
        static Seznam Novy(int n)
        {
            Seznam vys = new Seznam();

            vys.data = n;
            vys.next = null;
            vys.prev = null;
            return(vys);
        }
Example #6
0
        static void Zobraz(Seznam s)
        {
            while (s != null)
            {
                Console.Write(s.data + " ");
                s = s.next;
            }

            Console.WriteLine();
        }
Example #7
0
        static Seznam PridejPred(Seznam s, Seznam kam, int n)
        {
            Seznam tmp = Novy(n);

            if ((kam == null) || (kam.prev == null))
            {
                return(Zacatek(s, n));
            }
            tmp.prev      = kam.prev;
            kam.prev.next = tmp;
            kam.prev      = tmp;
            tmp.next      = kam;
            return(s);
        }
Example #8
0
        }                                   /////////////////////////////////////////////////

        static void UlozDoTxT(Seznam s)
        // a) Napište funkci, která uloží spojový seznam do textového souboru
        {
            FileStream   novyDokument     = new FileStream("..\\..\\..\\spojovySeznam_doTxt.txt", FileMode.Create);
            StreamWriter zapisDoDokumentu = new StreamWriter(novyDokument);
            Seznam       akt = s;

            while (akt != null)
            {
                zapisDoDokumentu.Write(akt.data + ", ");
                akt = akt.next;
            }
            zapisDoDokumentu.WriteLine();
            zapisDoDokumentu.Close();
        }
Example #9
0
        static Seznam Cykl(Seznam s)
        {
            Seznam akt = s;

            while (akt != null)
            {
                if (akt.next == null)
                {
                    akt.next = s;
                    s.prev   = akt;
                    return(s);
                }
                akt = akt.next;
            }
            return(s);
        }
Example #10
0
        static void OdstranNejvyssiH(Seznam odkud)
        // e) Napište funkci, která ze spojového seznamu odstraní prvek s nejvyšší hodnotou. Pokud má více prvků stejnou hodnotu, odstraní první z nich.
        {
            Seznam pracovni        = odkud;
            int    nejvyssiHodnota = -1;

            while (pracovni != null)
            {
                if (pracovni.data > nejvyssiHodnota)
                {
                    nejvyssiHodnota = pracovni.data;
                }
                pracovni = pracovni.next;
            }
            Console.WriteLine("Prvek spojového seznamu s nejvyšší hodnotou: {0}", nejvyssiHodnota);
        }
Example #11
0
        static void PocetVyskytuPrvku(Seznam kde, int co)
        // c) Napište funkci, která vrátí počet výskytů zadaného prvku ve spojovém seznamu.
        {
            Seznam pracovni     = kde;
            int    pocetVyskytu = 0;

            while (pracovni != null)
            {
                if (pracovni.data == co)
                {
                    pocetVyskytu++;
                }
                pracovni = pracovni.next;
            }
            Console.WriteLine("Hledaná hodnota {0} se ve spojovém seznamu vyskytuje {1}x.", co, pocetVyskytu);
        }
Example #12
0
        static void Main(string[] args)
        {
            int[]  pole     = { 2, 13, 48, 97, 2, 11, 2, 61, 235, 154, 452, 875 };
            Seznam x        = ConvertArray(pole);
            int    hledanyP = 2;                        // <-- patří k příkladu c)


            UlozDoTxT(x);                       // a)
            NactiZTxt();                        // b)
            PocetVyskytuPrvku(x, hledanyP);     // c)
            OdstranPosledni(x, hledanyP);       // d) - dodělat, chybí vymazání prvku (zatím umí jen najít index posledního hledaného prvku)
            OdstranNejvyssiH(x);                // e) - dodělat, chybí vymazání prvku (zatím umí jen vyhledat prvek s nejvyšší hodnotou)
            ObratPoradi(x);                     // f)
            //SeradSestupne(x);                   // g) - zcela chybí
            ProhodPrvniPosledni(x);             // h)
            ProhodDruhyPredposledni(x);         // i)


            Console.ReadLine();
        }
Example #13
0
        static Seznam PridejPo(Seznam s, int kam, int co)
        {
            Seznam tmp = Novy(co);
            Seznam akt = s;

            while (akt != null)
            {
                if (akt.data == kam)
                {
                    tmp.prev = akt;
                    tmp.next = akt.next;
                    akt.next = tmp;

                    return(s);
                }

                akt = akt.next;
            }
            return(null);
        }
Example #14
0
        static void OdstranPosledni(Seznam odkud, int co)
        // d) Napište funkci, která ze spojového seznamu odstraní poslední z prvků, jejichž hodnota je shodná se zadanou hodnotou.
        {
            Seznam pracovni      = odkud;
            int    indexAktualni = -1;
            int    indexPosledni = -1;

            while (pracovni != null)
            {
                indexAktualni++;
                if (pracovni.data == co)
                {
                    indexPosledni = indexAktualni;
                }

                //Console.Write(pracovni.data + ", ");
                pracovni = pracovni.next;
            }
            Console.WriteLine("Index posledního výskytu hledaného prvku je: {0}", indexPosledni);
        }
Example #15
0
        static void ZobrazCykl(Seznam s)
        {
            Seznam akt = s;

            if (akt == null)
            {
                return;
            }
            {
                while (akt.next != s)

                {
                    Console.WriteLine("Cyklický seznam" + akt.data);

                    akt = akt.next;
                }

                Console.WriteLine();
            }
        }
Example #16
0
        static void ProhodDruhyPredposledni(Seznam s)
        // i) Napište funkci, která ve spojovém seznamu prohodí druhý a předposlední prvek.
        {
            Seznam pracovni2    = s;
            Seznam pracovni     = s;
            int    prvni        = pracovni.data;
            int    druhy        = pracovni.next.data;
            int    predPosledni = -1;
            int    posledni     = -1;

            while (pracovni != null)
            {
                if (pracovni.next.next == null)
                {
                    predPosledni = pracovni.data;
                    pracovni     = pracovni.next;
                    if (pracovni.next == null)
                    {
                        posledni = pracovni.data;
                    }
                    break;
                }
                pracovni = pracovni.next;
            }
            Console.Write("Prohození předposledního a druhého prvku spojového seznamu: ");
            pracovni2.next.data = predPosledni;
            pracovni2.data      = posledni;
            while (pracovni2 != null)
            {
                if (pracovni2.next.next == null)
                {
                    pracovni2.data      = druhy;
                    pracovni2.next.data = prvni;
                    Console.Write(pracovni2.data + ", " + pracovni2.next.data);
                    break;
                }
                Console.Write(pracovni2.data + ", ");
                pracovni2 = pracovni2.next;
            }
            Console.WriteLine();
        }
Example #17
0
        static Seznam Konec(Seznam s, int n)
        {
            Seznam akt = s, tmp = Novy(n);

            if (akt == null)
            {
                return(tmp);
            }
            while (akt != null)
            {
                if (akt.next == null)
                {
                    tmp.prev = akt;
                    akt.next = tmp;
                    return(s);
                }
                akt = akt.next;
            }

            return(s);
        }
Example #18
0
        static int[] SeznamPole(Seznam s)
        {
            Seznam akt = s;
            int    i   = 0;

            while (akt != null)
            {
                i++;
                akt = akt.next;
            }

            int[] pole = new int[i];
            for (int k = 0; k < i; k++)
            {
                pole[k] = s.data;
                s       = s.next;
            }



            return(pole);
        }
Example #19
0
        static Seznam Smaz(Seznam s, int co)
        {
            Seznam akt  = s;
            Seznam tmp2 = Novy(co);
            Seznam tmp3;

            tmp2 = new Seznam();
            tmp3 = null;
            while (akt != null)
            {
                if (akt.data == co)
                {
                    tmp2      = akt.next;
                    tmp3.next = tmp2;
                    tmp2.prev = akt.prev;
                    return(s);
                }

                tmp3 = akt;
                akt  = akt.next;
            }

            return(s);
        }
Example #20
0
 static void SeradSestupne(Seznam s)
 // g) Napište funkci, která prvky spojového seznamu uspořádá sestupně.
 {
 }
Example #21
0
        static void Main(string[] args)
        {
            Console.WriteLine("Kolik chcete zadat čísel do seznamu? Minimální počet je 7");
            int cisla = Convert.ToInt32(Console.ReadLine());

            int[] pole = new int[cisla];
            for (int i = 1; i < cisla && cisla > 7; i++)
            {
                Console.Write("Zadejte {0} cislo: ", i);



                pole[i] = Convert.ToInt32(Console.ReadLine());
            }



            Seznam s1 = PoleSeznam(pole);

            Zobraz(s1);
            Seznam s2 = new Seznam();


            Console.WriteLine("Chcete nějakou hodnotu do seznamu přidat, smazat nebo pokračovat? ");
            Console.WriteLine("1. - Přidej");
            Console.WriteLine("2. - Smaž");
            Console.WriteLine("3. - Nic");
            string menu = Console.ReadLine();

            if (menu == "1")
            {
                Console.WriteLine("Kam chcete vkládat?");
                int kam = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Co chcete vkládat?");
                int co = Convert.ToInt32(Console.ReadLine());



                PridejPo(s1, kam, co);
                Zobraz(s1);
            }


            else if (menu == "2")
            {
                Console.WriteLine("Co chcete mazat?");
                int co = Convert.ToInt32(Console.ReadLine());



                Smaz(s1, co);
                Zobraz(s1);
            }



            else
            {
                Console.WriteLine("Ok, nedělám nic, pokračuji");
                Console.ReadLine();
            }



            Console.WriteLine("Původní pole Quicksort : ");
            foreach (var item in pole)
            {
                Console.Write(" " + item);
            }
            Console.WriteLine();

            Quick_Sort(pole, 0, pole.Length - 1);

            Console.WriteLine();
            Console.WriteLine("Setřídené pole QuickSort : ");

            foreach (var item in pole)
            {
                Console.Write(" " + item);
            }
            Console.WriteLine();



            Seznam s4 = Cykl(s1);

            ZobrazCykl(s4);

            Console.ReadLine();
        }