@vreddd

C# Реализация методов работы со стеком на основе массива, в чем ошибка?

class Program
    {
        static void Main(string[] args)
        {
            int element;
            Random random = new Random();
            Console.WriteLine("введите количество элементов стека?");
            int n;
            n = Convert.ToInt32(Console.ReadLine());

            Stack stk = new Stack(n);
            int head = 0;
            for (int i = 0; i < n; i++)//заполнила стек
            {
                element = random.Next(0, 200);
                if (stk.Init() != head)
                {
                    stk.Push(element);
                }
            }

            for (int i = 0; i < n; i++)
            {
                Console.Write(stk.List() + " ");
            }
                Console.WriteLine();
           head = n;
            int a;
            for (int i = n; i > 0; i--)//новый стек
            {
                if (head % 2 == 0)
                { a = stk.Pop();
                    Console.Write(a - 1 + " ");
                }
                else
                if (head % 2 != 0)
                {
                    a = stk.Pop();
                    Console.Write(a+" ");
                }
                Console.Write(head);
                head--; 
            }
           Console.ReadLine();
        } 
    }

    class Stack
    {
        int[] stack;
        int head = 0;
        public Stack(int size)
        {
            stack = new int[size];
        }
        public void Push(int element)//добавление
        {
            stack[head] = element;
            head++;
        }
        public int Pop()//извлечение
        {
           
            return (stack[head]);
           // head--;
        }
        public int Init()//инициализация
        {
            return stack.Length;
        }
        public int List()//вывод
        {
            head--;
            return (stack[head]);
        }
    }
}


Стек сам выводит, а вот новый стек, в котором каждый четный элемент уменьшен на 1 нет. Подскажите, пожалуйста, в чем ошибка. Я в программировании 0, поэтому надеюсь на понимание и помощь, заранее спасибо.
  • Вопрос задан
  • 1628 просмотров
Пригласить эксперта
Ответы на вопрос 2
Используйте готовый Stack
Прочитайте книгу 1-2.

бегло посмотрел:
...
else  if (head % 2 != 0) //не нужен, достаточно else { .. }
...
public int Pop()//извлечение
        {
           
            return (stack[head]);
           // head--; -< надо снять коммент
        }
Ответ написан
Делал не так давно задание по стеку на массиве, получилось более менее прилично вроде (можно без особых проблем реализацию IEnumerable прикрутить). Код. По заданию требовалось сделать это дело на VB.Net, хоть и писал на С#, исходников не сохранилось, но особой разницы и нет.
Еще рекомендую заглянуть на MS/Mono реализацию стека, там по сути тоже самое, но более навороченное.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы