스택(Stack)이란?
C#에서의 스택은 후입선출(LIFO) 방식으로 데이터를 저장하는 자료 구조입니다. 요소를 추가하고 제거할 때는 맨 위(top)에서만 가능합니다.
꼭 알아야 하는 지식!
스택(Stack)
- 후입선출 - 후입선출(LIFO)은 가장 나중에 들어온 데이터가 먼저 나가는 자료 구조의 원리를 나타냅니다.
- 탑(top) - "top"은 스택의 맨 위에 위치한 요소를 가리키는 포인터 역할을 합니다.
팝(pop)
- "팝(pop)"은 스택에서 맨 위에 있는 요소를 제거하는 작업을 의미합니다.
푸시(push)
- "푸시(push)"는 스택의 맨 위에 새로운 요소를 추가하는 작업을 의미합니다.
스택(Stack) 이론
일단 스택을 사용하기 위해서 위 지식들 중 몇 가지를 꼭 알아야 합니다.
후입선출, 탑(top), 팝(pop), 푸시(push) 이 4가지 지식은 꼭 알아야 아래 있는 사진이나 설명을 이해할 수 있습니다.
위 사진처럼 스택이라는 공간이 있고, 그 공간 안에 데이터가 쌓여 있습니다. 그럼 여기서 제일 중요한 부분은 현재 top 데이터를 찾는 것이 1순위입니다. 지금 이 공간에서 top 데이터는 당연히 맨 위에 있는 데이터입니다. 그럼 아래 사진처럼 표현할 수 있습니다.
탑이 왜? 중요하나? 바로 탑을 알아야 "팝(pop)" 또는 "푸시(push)"를 할 수 있기 때문입니다. 그럼 여기서 바로 "푸시(push)"를 해보겠습니다.
위 사진을 보면 "푸시(push)"를 하면 새로운 데이터가 추가되고 맨 위에 데이터가 올라가며, 탑(top)은 당연히 맨 위에 있는 데이터를 가리키는 포인터이기 때문에 방금 들어온 데이터가 이제 탑(top)이 됩니다.
그럼 이제 스택에서 추가를 하는 "푸시(push)"말고 데이터를 제거하는 팝(pop)을 해보겠습니다.
아래 사진을 확인해 주세요.
후입선출(LIFO) 방식으로 당연히 먼저 들어온 데이터가 가장 먼저 나가는 형식이기 때문에,
위 사진처럼 방금 들어론 빨간색 데이터는 팝(pop)을 하여 바로 제거되는 걸 볼 수 있습니다. 그리고 빨간색 데이터가 제거되면서 당연히 탑(pop)은 맨 위에 있는 데이터를 다시 가리키는 걸 볼 수 있습니다.
스택 특징
- 가장 최근에 추가된 요소가 가장 먼저 제거됩니다.
- 스택은 맨 위의 요소만 접근이 가능합니다. 중간에 있는 요소에 직접 접근할 수 없습니다.
- 스택은 주로 추가(Push)와 제거(Pop) 연산에 중점을 둡니다. 중간에 있는 요소를 삽입하거나 삭제하는 것은 일반적으로 지원되지 않습니다.
- 스택은 배열 또는 연결 리스트로 구현될 수 있으며, 데이터를 순차적으로 저장하므로 메모리 효율적입니다.
스택(Stack)코드
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// 스택 생성
Stack<int> stack = new Stack<int>();
// 스택에 요소 추가 (푸시)
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
// 스택의 맨 위 요소 확인
Console.WriteLine("맨 위 요소: " + stack.Peek());
// 스택에서 요소 제거 (팝)
int poppedElement = stack.Pop();
Console.WriteLine("팝된 요소: " + poppedElement);
// 스택의 남은 요소 출력
Console.WriteLine("스택의 모든 요소:");
// while 루프를 사용하여 스택의 모든 요소 출력
while (stack.Count > 0)
{
int element = stack.Pop();
Console.WriteLine(element);
}
}
}

'컴퓨터공학 > 자료구조' 카테고리의 다른 글
선형 자료구조 - 해시테이블과 딕셔너리 c# (0) | 2024.06.05 |
---|---|
선형 자료구조 - 큐(Queue) c# (0) | 2024.06.05 |
선형 자료구조 - 연결 리스트(LinkedList) c# (0) | 2024.06.03 |
선형 자료구조 - 리스트(List<T>) c# (0) | 2024.06.02 |
선형 자료구조 - 리스트(ArrayList) c# (0) | 2024.05.31 |