C# 선형 자료구조 - 큐(Queue)

728x90
  • 큐(Queue)란?

- 선입선출(先入先出) 구조

- FIFO(First-In-First-Out)

 

  • Enqueue와 Dequeue

- Enqueue : 저장공간에 데이터를 집어넣는 행위

- Dequeue : 저장공간에서 데이터를 빼내는 행위

- Stack과 다르게 데이터 입/출구가 다르다(Rear / Front)

 

  • Enqueue

  • Dequeue

  • 배열로 구현

인덱스가 꽉 차면 더 이상 데이터가 입력되지 않는다.(OutofIndexLayer 출력)

인덱스 = Rear % 배열의 크기

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

namespace queue
{
    class Program
    {
        static int[] m_queue = new int[5];
        static int front = -1;
        static int rear = -1;
        static void Main(string[] args)
        {
            Enqueue(10);
            Enqueue(20);
            Enqueue(30);
            Enqueue(40);
            Enqueue(50);

            Dequeue();
            Dequeue();
            Dequeue();

            Enqueue(60);
            Enqueue(70);

            Dequeue();
            Dequeue();
            Dequeue();

            for (int i = 0; i < m_queue.Length; i++)
            {
                Console.WriteLine("Index" + i + " - " + m_queue[i]);
            }
        }
        private static void Dequeue()
        {
            if (front == -1)
                return;
            int value = m_queue[front % m_queue.Length];

            Console.WriteLine("Dequeue - " + value);

            m_queue[front % m_queue.Length] = 0;

            front++;

            if(front > rear)
            {
                front = -1;
                rear = -1;
            }
        }
        private static void Enqueue(int value)
        {
            rear++;

            if(rear - front > m_queue.Length - 1)
            {
                rear--;
                return;
            }
            m_queue[rear % m_queue.Length] = value;

            if (front == -1)
                front = 0;
        }
    }
}

 

728x90