Стек на основе массива - 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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы