대기열은 FIFO(선입선출) 유형의 배열로 작동하는 컨테이너 어댑터 유형입니다. 요소는 뒤쪽(끝)에 삽입되고 앞쪽부터 삭제됩니다. 큐는 캡슐화된 deque 객체를 사용합니다. 목록 (순차적 컨테이너 클래스)를 기본 컨테이너로 사용하여 해당 요소에 액세스할 수 있는 특정 멤버 함수 세트를 제공합니다.
다음은 대기열과 대기열의 다양한 메서드를 보여주는 예입니다.
CPP
자바가 현재 날짜를 가져오는 중
// CPP code to illustrate Queue in> // Standard Template Library (STL)> #include> #include> using> namespace> std;> // Print the queue> void> showq(queue<>int>>gq)> {> >queue<>int>>g = gq;> >while> (!g.empty()) {> >cout <<>' '> << g.front();> >g.pop();> >}> >cout <<>'
'>;> }> // Driver Code> int> main()> {> >queue<>int>>퀴즈;> >gquiz.push(10);> >gquiz.push(20);> >gquiz.push(30);> >cout <<>'The queue gquiz is : '>;> >showq(gquiz);> >cout <<>'
gquiz.size() : '> << gquiz.size();> >cout <<>'
gquiz.front() : '> << gquiz.front();> >cout <<>'
gquiz.back() : '> << gquiz.back();> >cout <<>'
gquiz.pop() : '>;> >gquiz.pop();> >showq(gquiz);> >return> 0;> }> |
>
>산출
The queue gquiz is : 10 20 30 gquiz.size() : 3 gquiz.front() : 10 gquiz.back() : 30 gquiz.pop() : 20 30>
대기열 방법은 다음과 같습니다.
자바 카운터
다음 함수의 시간 복잡도와 정의는 다음과 같습니다.
| 대기열::비어 있음() | 오(1) |
| 대기열::크기() | 오(1) |
| 대기열::장소() | 오(1) |
| 대기열::앞() | 오(1) |
| 대기열::뒤로() | 오(1) |
| 큐::푸시(g) | 오(1) |
| 대기열::팝() | 오(1) |
| 방법 | 정의 |
|---|---|
| 대기열::비어 있음() | 대기열이 비어 있는지 여부를 반환합니다. 대기열이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
| 대기열::크기() | 대기열의 크기를 반환합니다. |
| 큐::스왑() | 두 대기열의 내용을 교환합니다. 단, 크기는 다를 수 있지만 대기열의 데이터 유형은 동일해야 합니다. |
| 대기열::장소() | 대기열 컨테이너에 새 요소를 삽입하면 새 요소가 대기열 끝에 추가됩니다. |
| 대기열::앞() | 큐의 첫 번째 요소에 대한 참조를 반환합니다. |
| 대기열::뒤로() | 큐의 마지막 요소에 대한 참조를 반환합니다. |
| 큐::푸시(g) | 대기열 끝에 요소 'g'를 추가합니다. |
| 대기열::팝() | 대기열의 첫 번째 요소를 삭제합니다. |
더 많은 메소드를 위한 C++ 프로그램
C++
k-nn 알고리즘
// CPP code to illustrate Queue operations in STL> // Divyansh Mishra -->divyanshmishra101010> #include> #include> using> namespace> std;> // Print the queue> void> print_queue(queue<>int>>q)> {> >queue<>int>>온도 = q;> >while> (!temp.empty()) {> >cout << temp.front()<<>' '>;> >temp.pop();> >}> >cout <<>'
'>;> }> // Driver Code> int> main()> {> >queue<>int>>q1;> >q1.push(1);> >q1.push(2);> >q1.push(3);> >cout <<>'The first queue is : '>;> >print_queue(q1);> > >queue<>int>>q2;> >q2.push(4);> >q2.push(5);> >q2.push(6);> >cout <<>'The second queue is : '>;> >print_queue(q2);> > > >q1.swap(q2);> > >cout <<>'After swapping, the first queue is : '>;> >print_queue(q1);> >cout <<>'After swapping the second queue is : '>;> >print_queue(q2);> > >cout/returns false since q1 is not empty return 0; }> |
>
>산출
The first queue is : 1 2 3 The second queue is : 4 5 6 After swapping, the first queue is : 4 5 6 After swapping the second queue is : 1 2 3 0>
이 코드에서 작업의 시간 및 공간 복잡성은 다음과 같습니다.
print_queue 함수:
시간 복잡도: O(n), 여기서 n은 대기열의 요소 수입니다.
공간 복잡도: O(n), 여기서 n은 대기열의 요소 수입니다.
q1.push(1), q1.push(2), q1.push(3), q2.push(4), q2.push(5), q2.push(6):
시간 복잡도: 각 푸시 작업에 대해 O(1)입니다.
공간 복잡도: O(n), 여기서 n은 두 대기열의 총 요소 수입니다.
q1.스왑(q2):
시간 복잡도: 각 스왑 작업에 대해 O(1)입니다.
공간 복잡도: O(1). 이 작업은 두 큐의 내부 포인터만 교환하기 때문입니다.
q1.빈():
자바 예외 처리
시간 복잡도: O(1), 이 작업은 단순히 대기열이 비어 있는지 확인하기 때문입니다.
공간 복잡도: O(1), 이 작업에 추가 공간이 사용되지 않습니다.
전반적으로 이 코드의 시간 및 공간 복잡성은 일반적인 사용 사례에 적합하고 효율적입니다.
C++ 대기열에 대한 최근 기사