Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Edit with the Docs app
- Make tweaks, leave comments, and share with others to edit at the same time.
- NO THANKSUSE THE APP
- 7gyak
- 7. Gyak
- Generikus típusok
- Default kulcssszt is érdemes néha használni:
- class Minta
- {
- T a;
- public Minta( )
- {
- a = default(T);
- }
- }
- Megszorítások
- Lehet érték vagy referencia típúsú, d emégjobb ha konkrétabb pl interface (IComparable)
- Vermes generikus kód:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace _7gyak
- {
- class Verem<typeParam>
- {
- typeParam[] tomb; //typeParam egy kulcsszó, típusparaméter
- int pointer; //kövi elem helyét mutatja
- public Verem(int meret)
- {
- tomb = new typeParam[meret];
- pointer = 0;
- }
- public void Push(typeParam elem)
- {
- this.tomb[pointer++] = elem;
- }
- //de meg kéne oldani, hogy ne csak inteket rakhassak bele, mert útközbe meggondolom magam--> generikus típusok kellenek, de favágó módszer: object típusú tömbök (object[] tomb és minden átírva), de itt kasztolni kéne
- public object Pop()
- {
- return this.tomb[--pointer];
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Verem<string> V1 = new Verem<string>(5); //it tmondom meg hogy ez a típusparaméter, azaz V1-be stringeket tudok beletenmni
- V1.Push("dfghj");
- Console.WriteLine(V1.Pop());
- Verem<int> V2 = new Verem<int>(5);
- V2.Push(3);
- Console.WriteLine(V2.Pop());
- }
- }
- }
- --------------------------------------------------------------------------------
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Diagnostics; //stopwatch timer miatt használjuk
- namespace _7gyak
- {
- class Stack<T>
- {
- }
- class Verem<typeParam>
- {
- typeParam[] tomb; //typeParam egy kulcsszó, típusparaméter
- int pointer; //kövi elem helyét mutatja
- public Verem(int meret)
- {
- tomb = new typeParam[meret];
- pointer = 0;
- }
- public void Push(typeParam elem)
- {
- this.tomb[pointer++] = elem;
- }
- //de meg kéne oldani, hogy ne csak inteket rakhassak bele, mert útközbe meggondolom magam--> generikus típusok kellenek, de favágó módszer: object típusú tömbök (object[] tomb és minden átírva), de itt kasztolni kéne
- public object Pop()
- {
- return this.tomb[--pointer];
- }
- }
- class Program
- {
- //static void Ize(int p1, int p2);
- static void Main(string[] args)
- {
- //Verem<string> V1 = new Verem<string>(5); //it tmondom meg hogy ez a típusparaméter, azaz V1-be stringeket tudok beletenmni
- //V1.Push("dfghj");
- //Console.WriteLine(V1.Pop());
- //Verem<int> V2 = new Verem<int>(5);
- //V2.Push(3);
- //Console.WriteLine(V2.Pop());
- //-----------------------------------------
- //Stack<string> V1 = new Stack<string>();
- //Dictionary<string,int> myDict = new Dictionary<string,int>();
- //myDict.Add("eletkor", 18); //kulcs: életkor, értéke: 18
- //myDict.Add("Iranyitoszam", 1034);
- //myDict.Add("ztestmagassag", 180);
- //Console.WriteLine(myDict["eletkor"]); //kiírja h 18
- //foreach (var item in myDict.Values) //hanincs itt a .Values, akkor a kuclsokat is kiírja, így csak az értékeket
- //{
- // Console.WriteLine(item);
- //}
- Stopwatch SW = new Stopwatch();
- SW.Start();
- List<string> L1 = new List<string>();
- int S = int.Parse(Console.ReadLine());
- //L1.Add("JHJK");
- for (int i = 0; i < S; i++)
- {
- L1.Add("WOW");
- }
- //LinkedList<string> L2 = new LinkedList<string>();
- //for (int i = 0; i < 10000; i++)
- //{
- // L2.AddFirst("WOW");
- //}
- SW.Stop();
- Console.WriteLine(SW.ElapsedMilliseconds);
- Console.ReadLine();
- }
- }
- }
- -------------------------------------------------------------------
- Saját lista készítése
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Diagnostics;
- namespace _7gyak
- {
- class LancoltLista<T>
- {
- //láncolt lista feje egy referencia a láncolt lista elemére
- //mutató értékpárokat tárolok--> beágyazott osztályt használok
- class ListaElem
- {
- public T ertek;
- public ListaElem kovetkezo; //mutató
- public ListaElem(T ertek)
- {
- this.ertek = ertek;
- //this.kovetkezo = kovetkezo;
- }
- }
- ListaElem fej=null;
- private ListaElem AdottErtekElottiElem(T ertek)
- {
- ListaElem aktualisElem = fej;
- ListaElem megelozoElem = null;
- while (aktualisElem != null && aktualisElem.ertek.Equals(ertek))
- {
- megelozoElem = aktualisElem;
- aktualisElem = aktualisElem.kovetkezo;
- }
- if (aktualisElem == null)
- {
- return null;
- }
- else
- {
- return megelozoElem;
- }
- }
- public void AdottErtekEleBeszurt(T adottErtek, T ujErtek)
- {
- ListaElem uj = new ListaElem(ujErtek);
- ListaElem elozo = AdottErtekElottiElem(ujErtek);
- uj.kovetkezo = elozo.kovetkezo;
- if (elozo != null)
- {
- uj.kovetkezo = elozo.kovetkezo;
- elozo.kovetkezo = uj;
- }
- }
- public void EloreBeszur(T ertek)
- {
- ListaElem ujElem = new ListaElem(ertek);
- ujElem.kovetkezo = fej; //itt egy másolat történik
- fej = ujElem;
- }
- public void Bejar()
- {
- //végigmegy a listán és kiírja a konzolra az értékeket
- ListaElem aktualisElem = fej;
- while (aktualisElem != null)
- {
- Console.WriteLine(aktualisElem.ertek);
- aktualisElem = aktualisElem.kovetkezo;
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- LancoltLista<string> myLL = new LancoltLista<string>();
- myLL.EloreBeszur("elso");
- myLL.EloreBeszur("masodik");
- myLL.EloreBeszur("harmadik");
- myLL.AdottErtekEleBeszur("masodik", "WOW");
- myLL.Bejar();
- myLL.Bejar();
- Console.ReadLine();
- }
- }
- }
- Befejezni, mert nem működik
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement