본문 바로가기

C#

C# 문법 -Queue<T>의 구현

반응형

선입 선출 형태의 자료를 다룰 때는 큐를 사용합니다. 선착순으로 제일 먼저 들어온 자료가 제일 먼저 나가는 자료 구조입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        class Node<T>
        {
            internal T value;
            internal Node<T> next;

            public Node(T value)
            {
                this.value = value;
                this.next = null;
            }
        }
        class MyQueue<T>
        {
            internal Node<T> first = null;
            internal Node<T> last = null;
            internal void EnQueue(Node<T> node )
            {
                if (last == null)
                {
                    first = last = node;
                }
                else
                {
                    last.next = node;
                    last = node;
                }
            }
            internal T DeQueue()
            {
                if (first == null)
                {
                    Console.WriteLine("Queue is Empty");
                    return default;
                }
                else
                {
                    T value = first.value;
                    first = first.next;
                    return value;
                }
            }
            internal void Print()
            {
                for (Node<T> t = first; t != null; t= t.next)
                {
                    Console.Write(t.value + "->");
                }
                Console.WriteLine();
            }

        }
        static void Main(string[] args)
        {
            Random random = new Random();
            MyQueue<float> queue = new MyQueue<float>();

            for (int i = 0; i < 5; i++)
            {
                queue.EnQueue(new Node<float>(random.Next(100) / 100.0f));
                
            }
            queue.Print();

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("DeQueue :"+ queue.DeQueue());
                
            }
            queue.Print();
        }
    }
}
반응형