namespace Task_1
{
using System;
public class Program
{
#region Abstract classes
public interface IListNode<T>
where T : struct
{
T Value { get; set; }
ListNode<T> Next { get; set; }
void Insert(T newValue);
}
public interface IArray<T>
where T : IListNode<int>
{
void Insert(int newValue);
}
public interface IHashTable
{
Array<ListNode<int>> Values { get; set; }
void Insert(int newValue);
}
#endregion
public static void Main(string[] args)
{
}
#region Impliment classes
public class ListNode<T> : IListNode<T>
where T : struct
{
public T Value { get; set; }
public ListNode<T> Next { get; set; }
public void Insert(T newValue)
{
Value = newValue;
}
}
public class Array<T> : IArray<T>
where T : IListNode<int>
{
private ListNode<int> firstElement;
private ListNode<int> lastElement;
public void Insert(int newValue)
{
var node = new ListNode<int>();
node.Insert(newValue);
if (firstElement == null)
{
firstElement = node;
}
else
{
lastElement.Next = node;
}
lastElement = node;
}
}
public class HashTable : IHashTable
{
public Array<ListNode<int>> Values { get; set; }
public void Insert(int newValue)
{
}
}
#endregion
}
}