Стек на основе массива - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д