Реализация стека в виде массива c#, из-за чего ошибка?
Выдаёт ошибку:"Использование универсального тип "ConsoleApplication1.CStack" требует аргумент типа "1" ".
namespace ConsoleApplication1
{
public class CStack
{
private T[] _array; //массив для хранения данных типа T
private const int defaultCapacity = 10; //вместимость по умолчанию, потом можно расширить
private int size; //размер
public CStack()
{ //конструктор
this.size = 0;
this._array = new T[defaultCapacity];
}
public bool isEmpty() //проверка на пустоту
{
return this.size == 0;
}
public virtual int Count //параметр для вывода размера
{
get
{
return this.size;
}
}
public T Pop() //метод взятия с вершины
{
if (this.size == 0)
{ //вброс ошибки при взятии с пустого стека (Overflow)
throw new InvalidOperationException();
}
return this._array[--this.size];
}
public void Push(T newElement)
{
if (this.size == this._array.Length) //если у нас переполнение...
{ //знаю, что неоптимально, но это c#...
T[] newArray = new T[2 * this._array.Length];
Array.Copy(this._array, 0, newArray, 0, this.size);
this._array = newArray; //просто создаем новый массив с двойным размером
}
this._array[this.size++] = newElement; //вставляем элемент
}
public T Peek()
{
if (this.size == 0)
{
throw new InvalidOperationException();
}
return this._array[this.size - 1];
}
}
class Program
{
static void Main(string[] args)
{
CStack stack = new CStack();
stack.Push(3);
stack.Push(18);
Console.WriteLine("element Number " + stack.Count.ToString() + " is " + stack.Pop().ToString());
Console.WriteLine("element Number " + stack.Count.ToString() + " is " + stack.Pop().ToString());
Console.ReadLine();
}
}
}
Простите, а где у вас собственно создается T. Это генерик? Тогда ваш класс должен быть CStack<T>
По коду :
Метод POP - а где у вас удаляется элемент из списка? Или он продолжит там лежать? А если тип будет тяжеловесным?
Откуда у вас такая любовь к this?
Я бы еще заменил исключение на собственное - "Стек пуст". Вы бросаете InvalidOperationException без пояснений. Как я как клиент должен догадаться что произошло?
P.S. Стек это НЕ массив. Стек это связанный список с правилом обхода LIFO. Каждый объект должен иметь ссылку на следующий объект стека.
Код взял отсюда evilcoderr.blogspot.ru/2013/01/stack-c.html Мне нужна реализация стека в виде массива и реализация очереди в виде массива, больше нигде не нашёл. Нужно срочно, а как вы заметили, к программированию я вообще никакого отношения не имею.