Стек на основе массива - C#
Формулировка задачи:
Здравствуйте! Пожалуйста, подскажите, что за ошибку выдает компилятор: я разбираюсь со структурами памяти, в данном случае со стеком на основе массива-нашла текст программы на страничке http://evilcoderr.blogspot.ru/2013/01/stack-c.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class CStack<T>
{
private T[] _array; //массив для хранения данных типа Т
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) //если у нас переполнение
{
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 InvalidProgramException();
}
return this._array[this.size - 1];
}
}
class Program
{
static void Main(string[] args)
{
CStack stack = new CStack(); //В ЭТОМ МЕСТЕ-ОШИБКА: ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ 1 ТИП АРГУМЕНТОВ ???
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();
}
}
}Решение задачи: «Стек на основе массива»
textual
Листинг программы
using System;
namespace ConsoleApplication1
{
public class CStack<T>
{
private const int DefaultCapacity = 10; //вместимость по умолчанию, потом можно расширить
private T[] _array; //массив для хранения данных типа Т
private int _size; //размер
public CStack() //конструктор
{
_size = 0;
_array = new T[DefaultCapacity];
}
public virtual int Count //параметр для вывода размера
{
get
{
return _size;
}
}
public bool IsEmpty() //проверка на пустоту
{
return _size == 0;
}
public T Pop() //метод взятия с вершины
{
if (_size == 0)
{
//вброс ошибки при взятии пустого стека(Overflow)
throw new InvalidOperationException();
}
return _array[--_size];
}
public void Push(T newElement)
{
if (_size == _array.Length) //если у нас переполнение
{
var newArray = new T[2*_array.Length];
Array.Copy(_array, 0, newArray, 0, _size);
_array = newArray; //просто создаём новый массив с двойным размером
}
_array[_size++] = newElement; //вставляем элемент
}
public T Peek()
{
if (_size == 0)
{
throw new InvalidProgramException();
}
return _array[_size - 1];
}
}
internal class Program
{
private static void Main(string[] args)
{
var stack = new CStack<int>(); //В ЭТОМ МЕСТЕ-ОШИБКА: ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ 1 ТИП АРГУМЕНТОВ ???
stack.Push(3);
stack.Push(18);
Console.WriteLine("element Number {0} is {1}", stack.Count, stack.Pop());
Console.WriteLine("element Number {0} is {1}", stack.Count, stack.Pop());
Console.ReadLine();
}
}
}