C# - 일반화 스택

양규빈·2023년 7월 18일
0

C# 공부

목록 보기
17/30

개요

C#에서 일반화 스택(Generic Stack)은 System.Collections.Generic 네임스페이스에서 제공되는 자료 구조이다.
제네릭을 사용하여 스택에 여러 다른 자료형을 저장할 수 있도록 일반화되어 있다.

일반화 스택을 사용하려면 System.Collections.Generic 네임스페이스를 임포트해야 한다.

일반화 스택의 장점

  1. 자료형 유연성: 스택은 오직 특정한 자료형을 저장할 수 있다. 예를 들어, Stack<int>는 정수형만 저장할 수 있다.
    반면에, 일반화 스택은 C#의 제네릭(Generic) 기능을 사용하여 여러 다른 자료형을 저장할 수 있다.
    예를 들어, Stack<T>와 같이 정의하면 T 자리에 어떤 자료형이든 사용할 수 있다.

  2. 타입 안전성: 일반화 스택은 컴파일 시에 타입 안전성을 보장한다.
    컴파일러는 사용된 자료형에 대한 타입 체크를 수행하므로, 잘못된 자료형이 스택에 추가되는 상황을 방지할 수 있다.
    스택은 정적 자료형을 사용하므로 컴파일 시에 타입 체크가 이루어지지 않으며, 실행 시에 타입 오류가 발생할 수 있다.

  3. 메모리 사용: 스택은 각각의 요소를 스택의 내부에 저장한다.
    일반화 스택도 마찬가지로 각 요소를 스택 내부에 저장하지만, 추가적인 메모리 공간이 필요한 경우도 있다.
    예를 들어, 참조 형식의 요소를 일반화 스택에 저장할 때는 참조 주소가 추가로 필요하다.



코드 및 상세 설명

먼저 제너릭 라이브러리 추가해야 한다.


Stack<int> 변수명 = new Stack<int>();
변수명.Push(값);
변수명.Push(값);
변수명.Push(값);

Print<T>
제네릭 타입을 이용하여, 스택 자료형을 매개변수로 하는 메서드.

초기화
스택에서 푸쉬를 사용하지 않고도, 위와 같은 방식으로 초기화가 가능하다.

스택의 맴버 메서드

GetEnumberator()
스택 자료형을 출력할 수 있는 또다른 방법.
enumerator는 IEnumerator<int> 인터페이스를 구현한 객체이다.

CopyTo()
복사할 스택변수명.CopyTo(피복사할 스택, 시작위치);

stack1.Clear()

Clear()
전체 값을 지우는 맴버 함수
스택변수명.Clear()

Reverse<>
Stack의 Reverse<>
값을 위부터 아래까지 순서를 뒤바꿈

스택의 정렬

input에서 pop한 값을 비교하여, 스택의 peek값을 비교한다.
이때, 스택의 더 작다면, stack의 최상위값을 input으로 다시 push한다.
스택이 더 크면, input의 값을 그대로 push한다.

과정을 반복하면 stack 값이 sorting이 완료된 상태가 된다.

단, 이 경우에 매개변수로 받은 input 내의 값들은 모두 pop으로 값을 빼버린 상태이기에, 추후 input stack을 사용하기 위해서는, 스택에 저장된 값을 다시 push해주는 과정이 필요할 수도 있다.

Sorting된 스택을 Reverse를 이용하여, 오름차순 내림차순을 뒤바꿀 수도 있다.

profile
훌륭한 개발자를 꿈꾸는 중입니다

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기