using System;
using System.Collections.Generic;

namespace Stack
{
	public class Tester
	{
		static void Main()
		{
			Stack<Int32> intStack = new Stack<Int32>();

			// Zapełnianie tablicy 

			for (int i = 0; i < 8; i++)
			{
				intStack.Push(i * 5);
			}


			// Wyświetlanie stosu
			Console.Write("Wartości stosu intStack:\t");
			PrintValues(intStack);

			// Usuwanie elementu ze stosu
			Console.WriteLine("\n(Pop)\t{0}",
			intStack.Pop());

			// Wyświetlanie stosu
			Console.Write("Wartości stosu intStack:\t");
			PrintValues(intStack);

			// Usuwanie ze stosu następnego elementu
			Console.WriteLine("\n(Pop)\t{0}",
			intStack.Pop());

			// Wyświetlanie stosu
			Console.Write("Wartości stosu intStack:\t");
			PrintValues(intStack);

			// Wyświetlanie pierwszego elementu stosu
			// bez usuwania go
			Console.WriteLine("\n(Peek) \t{0}",
			   intStack.Peek());


			// Wyświetlanie stosu
			Console.Write("Wartości stosu intStack:\t");
			PrintValues(intStack);

			// Deklaracja obiektu przechowującego
			// 12 liczb całkowitych
			int[] targetArray = new int[12];

			for (int i = 0; i < targetArray.Length; i++)
			{
				targetArray[i] = i * 100 + 100;
			}

			// Wyświetlanie elementów tablicy targetArray
			Console.WriteLine("\nTablica targetArray: ");
			PrintValues(targetArray);

			// Kopiowanie całej zawartości stosu do
			// tablicy targetArray, począwszy od indeksu 6
			intStack.CopyTo(targetArray, 6);


			// Wyświetlanie wartości tablicy targetArray
			Console.WriteLine("\nTablica targetArray po kopiowaniu: ");
			PrintValues(targetArray);

		}

		public static void PrintValues(
		   IEnumerable<Int32> myCollection)
		{
			IEnumerator<Int32> enumerator =
			   myCollection.GetEnumerator();
			while (enumerator.MoveNext())
				Console.Write("{0} ", enumerator.Current);
			Console.WriteLine();
		}
	}
}
