하랑이 코딩

컴퓨터공학/자료구조

선형 자료구조 - 스택(Stack) c#

하랑이~! 2024. 6. 4. 13:54

스택(Stack)이란?


C#에서의 스택은 후입선출(LIFO) 방식으로 데이터를 저장하는 자료 구조입니다. 요소를 추가하고 제거할 때는 맨 위(top)에서만 가능합니다.

 

꼭 알아야 하는 지식!

 

스택(Stack)

  • 후입선출 - 후입선출(LIFO)은 가장 나중에 들어온 데이터가 먼저 나가는 자료 구조의 원리를 나타냅니다.
  • 탑(top) - "top"은 스택의 맨 위에 위치한 요소를 가리키는 포인터 역할을 합니다.

 

팝(pop)

  • "팝(pop)"은 스택에서 맨 위에 있는 요소를 제거하는 작업을 의미합니다.

 

푸시(push)

  • "푸시(push)"는 스택의 맨 위에 새로운 요소를 추가하는 작업을 의미합니다.

 

스택(Stack) 이론


일단 스택을 사용하기 위해서 위 지식들 중 몇 가지를 꼭 알아야 합니다.

후입선출, 탑(top), 팝(pop), 푸시(push)4가지 지식은 꼭 알아야 아래 있는 사진이나 설명을 이해할 수 있습니다.

 

위 사진처럼 스택이라는 공간이 있고, 그 공간 안에 데이터가 쌓여 있습니다. 그럼 여기서 제일 중요한 부분은 현재 top 데이터를 찾는 것이 1순위입니다. 지금공간에서 top 데이터는 당연히 맨 위에 있는 데이터입니다. 그럼 아래 사진처럼 표현할 수 있습니다.

 

탑(top) - "top"은 스택의 맨 위에 위치한 요소를 가리키는 포인터 역할을 합니다.

 

탑이 왜? 중요하나? 바로 탑을 알아야 "팝(pop)" 또는 "푸시(push)"를 할 수 있기 때문입니다. 그럼 여기서 바로 "푸시(push)"를 해보겠습니다.

"푸시(push)"는 스택의 맨 위에 새로운 요소를 추가하는 작업을 의미합니다.

 

위 사진을 보면 "푸시(push)"를 하면 새로운 데이터가 추가되고 맨 위에 데이터가 올라가며, 탑(top)은 당연히 맨 위에 있는 데이터를 가리키는 포인터이기 때문에 방금 들어온 데이터가 이제 탑(top)이 됩니다.

 

그럼 이제 스택에서 추가를 하는 "푸시(push)"말고 데이터를 제거하는 팝(pop)을 해보겠습니다.

아래 사진을 확인해 주세요.

 

"팝(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);
        }
    }
}

 

 

728x90