본문 바로가기
개발/C#

C# 스택, 큐, 재귀 함수 예시 간단 구현 Stack, Queue, Recursive Function

by SPNK 2023. 10. 20.
반응형

스택 (Stack)

스택은 데이터를 저장하고 접근하는 데 사용되는 추상 데이터 구조입니다.
데이터를 넣는 작업을 "푸시(Push)"라고 하며, 데이터를 꺼내는 작업을 "팝(Pop)"이라고 합니다.
후입선출(LIFO - Last-In-First-Out) 방식으로 동작합니다. 마지막에 추가한 데이터가 가장 먼저 꺼내집니다.
예시: 웹 브라우저의 "뒤로 가기" 버튼, 함수 호출 스택 등에서 사용됩니다.

 

  • 코드 작성
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<int> stack = new Stack<int>();

        // 스택에 데이터 푸시
        stack.Push(1);
        stack.Push(2);
        stack.Push(3);

        // 스택에서 데이터 팝
        int poppedValue = stack.Pop();

        Console.WriteLine("팝된 값: " + 팝된값); // 출력: 3
    }
}

 

큐 (Queue)

큐는 스택과 유사하지만, 데이터를 "선입선출(FIFO - First-In-First-Out)" 방식으로 처리합니다.
데이터를 넣는 작업을 "인큐(Enqueue)"라고 하며, 데이터를 꺼내는 작업을 "디큐(Dequeue)"라고 합니다.
예시: 대기열, 작업 스케줄링, 네트워크 패킷 처리 등에서 사용됩니다.

 

  • 코드 작성
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<int> queue = new Queue<int>();

        // 큐에 데이터 인큐
        queue.Enqueue(1);
        queue.Enqueue(2);
        queue.Enqueue(3);

        // 큐에서 데이터 디큐
        int dequeuedValue = queue.Dequeue();

        Console.WriteLine("디큐된 값: " + 디큐된값); // 출력: 1
    }
}

 

재귀 함수 (Recursive Function)

재귀 함수는 함수가 자신을 직접 또는 간접적으로 호출하는 프로그래밍 기법입니다.
재귀적 함수 호출은 종료 조건이 반드시 필요하며, 그렇지 않으면 무한 반복이 발생할 수 있습니다.
재귀 함수는 반복적인 작업을 더 간결하게 표현할 수 있으며, 특히 재귀적 데이터 구조를 다룰 때 유용합니다.
예시: 팩토리얼 계산, 피보나치 수열 계산, 트리 구조 탐색 등에서 사용됩니다.

 

  • 코드 작성
using System;

class Program
{
    static void Main()
    {
        int factorialResult = Factorial(5);
        Console.WriteLine("5의 팩토리얼: " + 팩토리얼결과);

        int fibonacciResult = Fibonacci(7);
        Console.WriteLine("피보나치 수열의 7번째 항: " + 피보나치결과);
    }

    // 팩토리얼을 재귀적으로 계산
    static int Factorial(int n)
    {
        if (n == 0)
            return 1;
        return n * Factorial(n - 1);
    }

    // 피보나치 수열을 재귀적으로 계산
    static int Fibonacci(int n)
    {
        if (n <= 1)
            return n;
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
}

 

반응형

댓글