ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Queue<T> 컬렉션의 사용 방법
    C# 예제 공부일기 2020. 7. 21. 19:32

    극장이나 음식점에서 순서를 기다리면서 줄을 서면 먼저 온 사람이 먼저 들어간다. 이와 같이 큐는 자료가 저장된 순서대로 선착순 처리할 때 유용한 자료구조이다. 먼저 들어간 자료가 먼저 처리되므로 선입선출(FIFO, First-In-First-Out)이라고도 한다.

     

    **배열이나 리스트가 인덱스로 특정 위치의 자료에 자유롭게 접근하는 반면에, Queue는 입력은 오직 뒤에서, 출력은 앞에서만 이루어진다. Queue에 자료를 넣는 것을 Enqueue, 꺼내는 것을 Dequeue라고 한다. .NET 컬렉션은 제네릭 Queue<T>와 재네릭이 아닌 Queue를 제공한다. 둘중 Queue<T>의 사용을 권장한다고 한다.

     

    static void Main(string[] args)
            {
                Queue<string> que = new Queue<string>();
                que.Enqueue("Tiger");
                que.Enqueue("Lion");
                que.Enqueue("Zebra");
                que.Enqueue("Cow");
                que.Enqueue("Rabbit"); //큐에 string 집어넣기
    
                PrintQueue("que :", que);
                Console.WriteLine("Dequeuing '{0}' ", que.Dequeue());//제일 처음 들어간 문자열 제거
                Console.WriteLine(" Peek : '{0}' ", que.Peek());//제일 처음 들어간 문자열 남겨놓고 출력
    
                Queue<string> que2 = new Queue<string>(que.ToArray()); //que -> que2로 복사
                PrintQueue("que2 :", que2);
    
                string[] array = new string[que.Count];//큐의 개수만큼 배열 생성
    
                que.CopyTo(array,0); //만든 배열에 복사하기
                Queue<string> que3 = new Queue<string>(array); //다시 또 새로만든 리스트에 넣기
                PrintQueue("que3 : ", que3);
    
                Console.WriteLine("que.Contains(Lion) = {0}", que.Contains("Lion"));
                que3.Clear(); //que3 날려버리기
                Console.WriteLine("Count = {0}, {1}, {2}", que.Count, que2.Count, que3.Count);
    
    
            }
            private static void PrintQueue(string s, Queue<string> q)
            {
                Console.Write("{0,-8}", s);
                foreach (var item in q)
                {
                    Console.Write("{0,-8}", item);
                }
                Console.WriteLine();
    
            }

    가장 먼저 만든 que에 각각의 동물이름을 집어넣고 출력

    -> dequeue하니까 가장 먼저 입력된 Tiger가 출력되고 큐에서 삭제된다.

    -> Peek 하니까 Tiger를 제외하고 가장먼저 입력된 Lion이 출력되고 큐에서 삭제는 되지 않는다.

    -> que2 에 que.ToArray를 고대로 복사하고 출력

    -> 문자열 배열 array 생성하고 que를 array에 복사한다.

    -> 복사한 배열을 또 que3에 넣고 que3를 생성한다.

    -> Peek했으니 Lione이 출력만되고 삭제되진 않았으니 Contains메소드의 결과는 참이다.

    -> que3 클리어 -> 그 결과 각각의 큐 내부의 데이터 개수는 4개 4개 0개

     

     

    큐에서 배열로 바꿔서 가지고 논 다음 다시 큐로 돌려주면 될 것 같다.

Designed by Tistory.