CH.개인기록 노트

C#은 처음이라

C# 자료구조(스택)

amckdgjs 2024. 3. 12. 16:56

스택은 LIFO(last in first out)구조로 마지막에 들어온 데이터가 제일 처음 나가는 자료구조이다. 

이렇게 먼저 들어온 데이터가 쌓이게 된다.(LIFO)그림은 직접 그린 모습.

스택의 멤버 함수로는 

  • Push : 스택 안에 데이터를 넣는다.
  • Pop : 스택 안에 저장된 데이터를 꺼낸다.
  • Peek : 가장 상단의 데이터를 꺼낸다.

등이 있다.

스택의 장점 :

  • : 간단한 구조로 인해 사용이 용이하다.
  • 요소의 추가 및 제거가 빠르다.
  • 재귀 알고리즘 및 메모리 관리에 유용하다

단점 : 

  • 고정된 크기때문에 동적 크기 조정이 어렵다
  • 중간에 있는 요소에 접근이 불가능하다.
  • 스택 관리를 잘못하면 오버플로우가 발생할 수 있다.
using System;
using System.Diagnostics;
using System.Collections.Generic;

namespace _0312
{
    class Stack<T>
    {
        private const int MAX_VALUES = 3;
        private int top;
        private T[] values;

        public Stack()
        {
            top = -1;//topㅡㅇㄹ -1로 설정
            values = new T[MAX_VALUES];//초기화
            Array.Clear(values, 0, MAX_VALUES);
        }
        public void Push(T val)
        {
            
            if (top + 1 < MAX_VALUES)
            {
                values[++top] = val; //값을 스택에 추가하고 Top 증가
            }
            else
            {
                Console.WriteLine("오버플로우! 오바이트함");
            }
        }
        public T Pop()
        {
            
            if (!Empty())
            {
                T val = values[top];
                values[top--] = default (T);
                return val;
            }
            else
            {
                Console.WriteLine("언더 플로우");
                return default(T);
            }
        }
        public T Top()
        {
            return values[top];
        }
        public bool Empty()
        {
            return top < 0;
        }
    }
    internal class Class2
    {
        static void Main()
        {
            Stack<int> stack = new Stack<int>();
            stack.Push(20);
            stack.Push(20);
            stack.Push(30);
            
            
            

            
            try
            {
                Console.WriteLine(stack.Pop() + " ");
                Console.WriteLine(stack.Pop() + " ");
                Console.WriteLine(stack.Pop() + " ");
            }
            catch(Exception ex) {
                Console.WriteLine($"{ex.Message}");
                
            }
        }
    }
}

'C#은 처음이라' 카테고리의 다른 글

C# 리스트(List)  (0) 2024.03.13
C# 자료구조 (큐Queue)  (0) 2024.03.12
C# 이벤트(Event)와 델리게이트(Delegate)  (0) 2024.03.11
C# 일반화(Generic)  (1) 2024.03.08
C# 문자열(string)  (0) 2024.03.07