[Delphi] 자료구조 - Queue

Clover·2022년 4월 10일
0

Delphi

목록 보기
11/12
post-thumbnail

델파이에서 큐(Queue)를 사용하려면 TQueue 클래스를 사용하면 된다.


TQueue

TQueue 클래스는 System.Generics.Collections 유닛에 포함되어 있고,
제너릭(Generic)을 사용하여 설계되어 있으므로 다음과 같이 선언해서 사용하면 된다.

var
	QueueS: TQueue<String>;
    QueueI: TQueue<Integer>;
begin
	...
    ...
end;

그리고 엠바카데로 공식 Wiki 에 간단한 예제를 함께한 설명이 있어서 참고하였다.

엠바카데로 Wiki - Delphi(Queue)

예제 코드

procedure QueueTest;
var
  Queue :TQueue<String>;  //System.Generics.Collections
begin
  try
    Queue := TQueue<String>.Create; //Queue 생성
 
    // Enqueue() : queue의 끝에 item을 추가한다.
    Queue.Enqueue('John');
    Queue.Enqueue('Mary');
    Queue.Enqueue('Bob');
    Queue.Enqueue('Anna');
    Queue.Enqueue('Erica');
 
    // Peek() : 가장 먼저 추가한 요소를 삭제없이 리턴한다.
    Memo1.Lines.Add('첫번째 요소 : ' + Queue.Peek());
 
    // Extract : 가장 먼저 추가한 요소를 삭제한다.
    Queue.Extract;
 
    // TrimExcess : Queue의 공간을 재조정(빈공간 해제)한다.
    Queue.TrimExcess;
 
    // Count : Queue의 개수를 리턴한다.
    Memo1.Lines.Add('The queue now contains ' + IntToStr(Queue.Count) + ' elements.');
 
    // Dequeue() : 가장 먼저 추가한 요소를 리턴 후 삭제한다.
    Memo1.Lines.Add('First enqueued element was: "' + Queue.Dequeue() + '".');
 
    Queue.Clear;  //Clear the Queue
 
  finally
    Queue.Free;  //Queue를 Destroy한다.
  end;
end;
  • Enqueue() : Queue에 요소를 추가(Add)한다.
  • Dequeue() : Queue의 가장 먼저 추가된 요소를 리턴 후 삭제(Poll)한다.
  • Extract : Queue의 가장 먼저 추가된 요소를 삭제만(Remove)한다.
  • Peek() : Queue의 가장 먼저 추가된 요소를 리턴만한다.
  • TrimExcess : Extract를 수행한 뒤 비어있는 공간을 메모리에서 해제 시켜준다.

동작 화면


Queue는 FIFO 구조이기 때문에, 나중에 입력한 값은 조작하기 어렵다는 특징이 있다.
그래서 Java 혹은 Python은 Queue를 앞,뒤로 pop하거나 add할 수 있는 Deque 구조를 지원한다.

하지만 델파이는 공식적으로 Deque를 지원하지 않으므로, 직접 구현해서 사용하거나 오픈소스를 찾아봐야 한다.

0개의 댓글