푸시 및 팝 예제가 포함된 C# 스택
⚡ 스마트 요약
C#의 스택은 System.Collections 네임스페이스에 속하는 컬렉션으로, 후입선출(LIFO) 원칙을 따릅니다. Push 메서드는 요소를 맨 위에 추가하고 Pop 메서드는 요소를 제거합니다.

C#의 스택이란 무엇입니까?
스택은 LIFO(후입선출) 개념을 나타내는 특수 사례 모음입니다. 먼저 LIFO를 이해하기 위해 예를 들어보겠습니다. 각 책이 서로 쌓여 있는 책 더미를 상상해 보십시오.
책의 경우 후입선출의 개념은 책 더미에서 맨 위에 있는 책만 제거할 수 있음을 의미합니다. 그 사이에 책을 빼는 것은 불가능합니다. 그렇게 하면 책 더미의 세팅을 방해할 수 있기 때문입니다.
따라서 C#, 스택도 같은 방식으로 작동합니다. 요소는 스택에 추가됩니다. 요소는 서로 위에 하나씩 추가됩니다. 요소를 스택에 추가하는 프로세스를 push 연산이라고 합니다. 스택에서 요소를 제거하려면 스택의 가장 위에 있는 요소를 제거할 수도 있습니다. 이 연산을 pop이라고 합니다.
Stack 컬렉션에서 사용 가능한 작업을 더 자세히 살펴보겠습니다.
스택 선언
스택은 스택 데이터 유형을 사용하여 생성됩니다. 스택의 객체를 생성할 때 키워드 “new”가 사용됩니다. 그런 다음 개체는 변수 st에 할당됩니다.
Stack st = new Stack()
스택에 요소 추가
push 메소드는 스택에 요소를 추가하는 데 사용됩니다. 문의 일반적인 구문은 다음과 같습니다.
Stack.push(element)
스택에서 요소 제거
pop 메서드는 스택에서 요소를 제거하는 데 사용됩니다. pop 연산은 스택의 최상위 요소를 반환합니다. 명령문의 일반 구문은 아래와 같습니다.
Stack.pop()
카운트
이 속성은 스택의 항목 수를 가져오는 데 사용됩니다. 다음은 이 명령문의 일반적인 구문입니다.
Stack.Count
포함
이 메서드는 스택에 요소가 있는지 확인하는 데 사용됩니다. 다음은 이 명령문의 일반적인 구문입니다. 이 문은 요소가 존재하면 true를 반환하고, 그렇지 않으면 false 값을 반환합니다.
Stack.Contains(element)
이제 이것이 코드 수준에서 작동하는 것을 살펴보겠습니다. 아래에 언급된 코드는 모두 우리의 코드에 작성됩니다. 콘솔 응용. 코드는 Program.cs 파일에 기록됩니다.
아래 프로그램에서는 위에서 언급한 방법을 어떻게 사용할 수 있는지 알아보기 위해 코드를 작성해 보겠습니다.
예제 1: Stack.Push() 메서드
이 예에서는 다음을 볼 수 있습니다.
- 스택이 생성되는 방법.
- 스택의 요소를 표시하고 Count 및 Contain 메서드를 사용하는 방법.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); foreach (Object obj in st) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the stack " +st.Count); Console.WriteLine("Does the stack contain the elements 3 "+st.Contains(3)); Console.ReadKey(); } } }
Code 설명:-
- 첫 번째 단계는 스택을 선언하는 데 사용됩니다. 여기서는 스택의 요소를 보유하는 변수로 "st"를 선언합니다.
- 다음으로 스택에 3개의 요소를 추가합니다. 각 요소는 Push 메서드를 통해 추가됩니다.
- 이제 스택 요소는 다음과 같은 인덱스 위치를 통해 액세스할 수 없으므로 배열 목록, 스택의 요소를 표시하려면 다른 접근 방식을 사용해야 합니다. 객체(obj)는 스택의 각 요소를 보유하기 위해 선언된 임시 변수입니다. 그런 다음 foreach 문을 사용하여 스택의 각 요소를 살펴봅니다. 각 스택 요소에 대해 값은 obj 변수에 할당됩니다. 그런 다음 Console.Writeline 명령을 사용하여 콘솔에 값을 표시합니다.
- 우리는 Count 속성을 사용하고 있습니다(일수) 스택에 있는 항목 수를 가져옵니다. 이 속성은 숫자를 반환합니다. 그런 다음 이 값을 콘솔에 표시합니다.
- 그런 다음 Contains 메서드를 사용하여 3의 값이 스택에 있는지 확인합니다. 그러면 true 또는 false 값이 반환됩니다. 그런 다음 이 반환 값을 콘솔에 표시합니다.
위 코드를 올바르게 입력하여 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.
출력:
출력에서 스택의 요소가 표시되는 것을 볼 수 있습니다. 또한 True 값이 표시되어 3의 값이 스택에 정의되어 있음을 알 수 있습니다.
주의 사항: 스택에 푸시된 마지막 요소가 먼저 표시되는 것을 확인했습니다. 이는 스택의 최상위 요소입니다. 스택 요소의 개수도 출력에 표시됩니다.
예제 2: Stack.Pop() 메서드
이제 "제거" 기능을 살펴보겠습니다. 스택의 최상위 요소를 제거하는 데 필요한 코드를 살펴보겠습니다.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); st.Pop(); foreach (Object obj in st) { Console.WriteLine(obj); } Console.ReadKey(); } } }
Code 설명:-
- 여기서는 스택에서 요소를 제거하는 데 사용되는 pop 메서드를 실행합니다.
위의 코드를 올바르게 입력하여 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.
출력:
요소 3이 스택에서 제거된 것을 볼 수 있습니다.
C# 스택 Peek() 메서드
push와 pop 메서드는 스택의 최상단 요소를 처리하지만, 때로는 최상단 요소를 제거하지 않고 보기만 해야 할 때가 있습니다. peek 메서드는 바로 그런 역할을 합니다. 컬렉션을 변경하지 않고 스택의 최상단 값을 반환하므로, 다음 항목을 제거하기 전에 미리 확인하고 싶을 때 유용합니다.
단계 1) 스택을 생성하고 세 개의 요소를 스택에 추가합니다. 그러면 값 3이 맨 위에 위치하게 됩니다.
단계 2) Peek 메서드를 호출하여 최상위 요소를 읽은 다음, Count 속성을 확인하여 아무것도 제거되지 않았는지 확인합니다.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); Console.WriteLine(st.Peek()); Console.WriteLine(st.Count); Console.ReadKey(); } } }
Code 설명:-
- st라는 이름의 스택이 선언되고, push 메서드를 사용하여 1, 2, 3의 값이 추가되므로 3이 최상위 요소가 됩니다.
- Peek 메서드는 요소를 제거하지 않고 최상위 요소를 반환하며, Count 속성은 스택에 있는 전체 항목 수를 그대로 보고합니다.
프로그램이 실행되면 해당 값을 출력합니다. 3 Peek에서 시작해서 카운트까지 3이는 해당 요소가 스택에 남아 있음을 증명합니다. 스택이 비어 있으면 Peek는 Invalid 예외를 발생시킵니다.OperationException이 발생하므로 호출하기 전에 Count를 확인하는 것이 안전합니다.
일반 스택 C#에서
위 예제에서는 System.Collections의 제네릭이 아닌 Stack 클래스를 사용했는데, 이 클래스는 모든 요소를 객체로 저장합니다. 하지만 최신 C# 코드에서는 일반적으로 제네릭 Stack 클래스를 선호합니다. System.Collections.Generic 네임스페이스의 클래스입니다. 스택을 선언된 단일 형식에 바인딩하므로 컴파일러가 모든 Push 및 Pop 작업을 검사하고 형변환이나 박싱이 필요하지 않습니다.
제네릭 스택의 주요 이점 아래에 나열되어 있습니다.
- 유형 안전: 타입은 선언 시점에 고정되므로 해당 타입의 값만 푸시할 수 있으며, 오류는 컴파일 시점에 포착됩니다.
- 복싱 금지: int와 같은 값 형식은 직접 저장되므로 제네릭이 아닌 스택에서 발생하는 박싱 비용을 피할 수 있습니다.
- 청소부가 읽은 내용: Pop과 Peek은 선언된 유형을 직접 반환하므로 결과를 object에서 다시 형변환할 필요가 없습니다.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { Stack<string> st = new Stack<string>(); st.Push("Java"); st.Push("Python"); Console.WriteLine(st.Pop()); Console.ReadKey(); } } }
이 예제에서는 스택이 Stack으로 선언되어 있습니다. 따라서 문자열 값만 허용합니다. Pop 메서드는 문자열을 직접 반환하고 출력합니다. Python마지막으로 푸시된 값입니다. 새 프로젝트의 경우 일반적인 스택이 사용됩니다. 추천하는 선택입니다.
C#에서 스택과 큐의 차이점
스택과 변발 스택과 큐는 모두 요소를 제거하는 순서를 제어하는 컬렉션이지만, 규칙은 정반대입니다. 스택은 후입선출(LIFO) 방식이고, 큐는 선입선출(FIFO) 방식입니다. 올바른 큐를 선택하면 다른 개발자들이 코드의 의도를 명확하게 이해할 수 있습니다.
주요 차이점은 다음과 같습니다.
- 주문: 스택은 가장 최근에 추가된 요소부터 제거하는 방식(LIFO)을 사용하는 반면, 큐는 가장 오래된 요소부터 제거하는 방식(FIFO)을 사용합니다.
- 행동 양식: 스택은 Push와 Pop을 사용하는 반면, 큐는 Enqueue를 사용하여 요소를 추가하고 Dequeue를 사용하여 요소를 제거합니다.
- 최상위 요소 접근: 스택은 Peek 메서드를 사용하여 다음 항목을 읽고, 큐는 Peek 메서드를 사용하여 앞에서부터 다음 항목을 읽습니다.
- 일반적인 용도: 스택은 실행 취소 기능, 표현식 평가 및 재귀에 적합합니다. trac킹은 스케줄링, 버퍼링 및 너비 우선 탐색에 적합한 반면, 큐는 스케줄링, 버퍼링 및 너비 우선 탐색에 적합합니다.
두 유형 모두 스택이라는 제네릭 형태로 제공됩니다. 그리고 대기열 System.Collections.Generic을 사용하므로 어느 쪽을 선택하든 타입 안정성을 확보할 수 있습니다.




