mirror of
https://github.com/Lendaia/oe-alga-feladatok.git
synced 2026-04-23 12:26:07 +01:00
275 lines
6.1 KiB
C#
275 lines
6.1 KiB
C#
using OE.ALGA.Paradigmak;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Immutable;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace OE.ALGA.Adatszerkezetek
|
|
{
|
|
public class TombVerem<T> : Verem<T>
|
|
{
|
|
T[] tomb;
|
|
int n = 0;
|
|
bool ures = true;
|
|
public TombVerem(int l)
|
|
{
|
|
tomb = new T[l];
|
|
}
|
|
public bool Ures
|
|
{
|
|
get { return ures; }
|
|
}
|
|
|
|
public T Felso()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void Verembe(T ertek)
|
|
{
|
|
if (n < tomb.Length)
|
|
{
|
|
tomb[n] = ertek;
|
|
n++;
|
|
ures = false;
|
|
}
|
|
else
|
|
{
|
|
throw new NincsHelyKivetel();
|
|
}
|
|
}
|
|
|
|
public T Verembol()
|
|
{
|
|
for (int i = tomb.Length; i > 0; i--)
|
|
{
|
|
if (tomb[i] != null)
|
|
{
|
|
return tomb[i];//should i actually delete it, or we are just courious whats the valueidk
|
|
}
|
|
}
|
|
ures = true;
|
|
throw new NincsElemKivetel();
|
|
}
|
|
}
|
|
public class TombSor<T> : Sor<T>
|
|
{
|
|
T[] tomb;
|
|
int n = 0;
|
|
bool ures = true;
|
|
public TombSor(int l)
|
|
{
|
|
tomb = new T[l];
|
|
}
|
|
|
|
public bool Ures
|
|
{
|
|
get { return ures; }
|
|
}
|
|
|
|
public T Elso()
|
|
{
|
|
return tomb[0];
|
|
}
|
|
|
|
public void Sorba(T ertek)
|
|
{
|
|
if (n < tomb.Length)
|
|
{
|
|
tomb[n] = ertek;
|
|
n++;
|
|
ures = false;
|
|
}
|
|
else
|
|
{
|
|
throw new NincsHelyKivetel();
|
|
}
|
|
}
|
|
|
|
public T Sorbol()
|
|
{
|
|
for (int i = tomb.Length; i > 0; i--)
|
|
{
|
|
if (tomb[i] != null)
|
|
{
|
|
return tomb[i];//should i actually delete it, or we are just courious whats the valueidk
|
|
}
|
|
}
|
|
ures = true;
|
|
throw new NincsElemKivetel();
|
|
}
|
|
}
|
|
public class TombLista<T> : Lista<T>, IEnumerable<T>
|
|
{
|
|
T[] tomb;
|
|
int n = 0;
|
|
public TombLista(int l)
|
|
{
|
|
tomb = new T[l];
|
|
}
|
|
|
|
public int Elemszam
|
|
{
|
|
get { return n; }
|
|
}
|
|
|
|
public void Bejar(Action<T> muvelet)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void Beszur(int index, T ertek)
|
|
{
|
|
if (index < 0)
|
|
{
|
|
throw new HibasIndexKivetel();
|
|
}
|
|
if (index < tomb.Length && tomb[index] == null)
|
|
{
|
|
tomb[index] = ertek;
|
|
}
|
|
else
|
|
{
|
|
T[] tmp = new T[tomb.Length * 2];
|
|
for (int i = 0; i < index; i++)
|
|
{
|
|
tmp[i] = tomb[i];
|
|
}
|
|
tmp[index] = ertek;
|
|
for (int i = index+1; i < tomb.Length; i++)
|
|
{
|
|
tmp[i] = tomb[i];
|
|
}
|
|
tomb = tmp;
|
|
}
|
|
n++;
|
|
}
|
|
|
|
public IEnumerator<T> GetEnumerator()
|
|
{
|
|
foreach (T t in tomb)
|
|
{
|
|
if (t != null)
|
|
{
|
|
yield return t;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Hozzafuz(T ertek)
|
|
{
|
|
if (n < tomb.Length)
|
|
{
|
|
tomb[n] = ertek;
|
|
}
|
|
else
|
|
{
|
|
T[] tmp = new T[tomb.Length * 2];
|
|
for (int i = 0; i < tomb.Length; i++)
|
|
{
|
|
tmp[i] = tomb[i];
|
|
}
|
|
tmp[n] = ertek;
|
|
tomb = tmp;
|
|
}
|
|
n++;
|
|
}
|
|
|
|
public T Kiolvas(int index)
|
|
{
|
|
if (index < 0)
|
|
{
|
|
throw new HibasIndexKivetel();
|
|
}
|
|
return tomb[index];
|
|
}
|
|
|
|
public void Modosit(int index, T ertek)
|
|
{
|
|
if (index < 0)
|
|
{
|
|
throw new HibasIndexKivetel();
|
|
}
|
|
if (index < tomb.Length)
|
|
{
|
|
tomb[index] = ertek;
|
|
}
|
|
else
|
|
{
|
|
T[] tmp = new T[tomb.Length * 2];
|
|
for (int i = 0; i < tomb.Length; i++)
|
|
{
|
|
tmp[i] = tomb[i];
|
|
}
|
|
tmp[n] = ertek;
|
|
tomb = tmp;
|
|
n++;
|
|
}
|
|
}
|
|
|
|
public void Torol(T ertek)
|
|
{
|
|
T[] tmp = new T[tomb.Length];
|
|
for (int i = tomb.Length; i > 0; i--)
|
|
{
|
|
if (i > n)//(ertek == tomb[i])
|
|
{
|
|
continue;
|
|
}
|
|
tmp[i] = tomb[i];
|
|
}
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
TombListaBejaro<T> bejaro = new TombListaBejaro<T>(tomb, n);
|
|
return bejaro;
|
|
}
|
|
}
|
|
public class TombListaBejaro<T> : IEnumerator<T>
|
|
{
|
|
T[] e;
|
|
int n;
|
|
int aktualisindex;
|
|
T current;
|
|
public T Current
|
|
{
|
|
get { return current; }
|
|
}
|
|
public TombListaBejaro(T[] e, int n)
|
|
{
|
|
this.n = n;
|
|
this.e = e;
|
|
aktualisindex = 0;
|
|
current = e[0];
|
|
}
|
|
|
|
object IEnumerator.Current => Current;
|
|
|
|
public void Dispose()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool MoveNext()
|
|
{
|
|
if (aktualisindex < n - 1)
|
|
{
|
|
aktualisindex++;
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
aktualisindex = -1;
|
|
}
|
|
}
|
|
} |