Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 컬렉션을 활용해 스택(Stack) 만들기


C#에서는 이미 존재하는 컬렉션을 그대로 활용해 새로운 스택(Stack)을 간단하게 만들 수 있습니다. Stack<T> 클래스는 IEnumerable<T> 타입의 컬렉션을 인자로 받는 생성자를 제공하기 때문에, 배열이나 리스트 등 다른 컬렉션의 요소들을 복사하여 스택을 초기화할 수 있습니다.

예제 1 – int형 요소로 스택 만들기

아래 예제에서는 먼저 정수 값을 담는 스택을 생성하고, ToArray() 메서드로 배열을 얻은 뒤 이 배열을 이용해 새로운 스택을 만드는 과정을 보여줍니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Stack<int> stack = new Stack<int>();
      stack.Push(100);
      stack.Push(200);
      stack.Push(300);
      stack.Push(400);
      stack.Push(500);
      stack.Push(600);
      stack.Push(700);
      stack.Push(800);
      stack.Push(900);
      stack.Push(1000);

      Console.WriteLine("스택 요소...");
      foreach (int val in stack) {
         Console.WriteLine(val);
      }

      Console.WriteLine("\n배열 요소...");
      Stack<int> arr = new Stack<int>(stack.ToArray());
      foreach (int val in arr) {
         Console.WriteLine(val);
      }
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

스택 요소...
1000
900
800
700
600
500
400
300
200
100

배열 요소...
100
200
300
400
500
600
700
800
900
1000

참고: 스택은 LIFO(Last In First Out, 후입선출) 구조이므로 스택 자체를 열거하면 가장 마지막에 넣은 요소부터 출력됩니다. 반면 ToArray()로 변환한 배열을 이용해 새 스택을 생성하면 요소가 순서대로 다시 푸시(Push)되어, 처음 넣은 값부터 출력되는 것을 확인할 수 있습니다.


예제 2 – string형 요소로 스택 만들기

이번에는 문자열(string) 요소를 담은 스택으로 동일한 방식을 적용해 보겠습니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Stack<string> stack = new Stack<string>();
      stack.Push("Katie");
      stack.Push("Andy");
      stack.Push("Ariane");
      stack.Push("Justin");

      Console.WriteLine("스택 요소...");
      foreach (string val in stack) {
         Console.WriteLine(val);
      }

      Console.WriteLine("\n배열 요소...");
      Stack<string> arr = new Stack<string>(stack.ToArray());
      foreach (string val in arr) {
         Console.WriteLine(val);
      }
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

스택 요소...
Justin
Ariane
Andy
Katie

배열 요소...
Katie
Andy
Ariane
Justin

이처럼 Stack<T>의 생성자에 컬렉션을 전달하기만 하면, 기존 데이터를 손쉽게 스택 구조로 변환할 수 있습니다. 정수든 문자열이든 동일한 패턴이 적용되므로, 다양한 타입의 컬렉션을 스택으로 활용할 때 유용하게 사용할 수 있습니다.