[데이터 구조] 대기 열의 순서 대기 열의 클래스 템 플 릿 구현
대열 은 FIFO 의 성질 을 가지 고 있다
대기 열의 저장 표시 도 두 가지 방식 이 있 습 니 다. 배열 기반, 목록 기반 입 니 다.배열 기반 을 순서 대기 열 이 라 고 합 니 다.목록 기반 을 체인 대기 열 이 라 고 합 니 다.
다음은 동적 배열 의 순서 대기 열 을 기반 으로 한 템 플 릿 류 의 실현 입 니 다.
순서 대기 열의 추상 적 인 기본 클래스, 예 를 들 어 다음 과 같은 것 을 볼 수 있 습 니 다. 인터페이스 와 명시 적 인 기본 구조 함수 와 분석 함수 만 제공 하고 파생 클래스 에서 호출 합 니 다.
#ifndef QUEUE
#define QUEUE
//
template
class Queue
{
public:
Queue(){}
~Queue(){}
virtual bool EnQueue(const T& x)=0;
virtual bool DeQueue(T& x)=0;
virtual bool getFront(T& x)const=0;
virtual bool IsEmpty()const=0;
virtual bool IsFull()const=0;
virtual int getSize()const=0;
};
#endif
순서 대기 열의 상세 한 실현 은 다음 과 같다. (모든 순 허 함수 의 인 터 페 이 스 를 덮어 쓰 고 자신의 인터페이스 와 데이터 구성원 을 제공한다.)
/
#include"Stack.h"
#include
//#include
#include
using namespace std;
template
class SeqQueue:public Queue
{
public:
SeqQueue(int sz=10):front(0),rear(0),maxSize(sz),elements(new T[sz]){assert(elements!=NULL);}
~SeqQueue(){delete []elements;}
SeqQueue(const SeqQueue& rhs);
SeqQueue& operator=(const SeqQueue& rhs);
bool EnQueue(const T& x);
bool DeQueue(T& x);
bool getFront(T& x)const;
bool IsEmpty()const{return (rear==front)?true:false;} //
bool IsFull()const{return ((rear+1)%maxSize==front)?true:false;} //
int getSize()const{return (rear-front+maxSize)%maxSize;} // 。+maxSize
void makeEmpty(){front=rear=0;}
friend ostream& operator<< (ostream& os,const SeqQueue& rhs);//
protected:
int front,rear;
T* elements;
int maxSize;
};
template
bool SeqQueue::EnQueue(const T& x)
{
if(IsFull())
return false;
elements[rear]=x;
rear=(rear+1)%maxSize;// ++rear
return true;
}
template
bool SeqQueue::DeQueue(T& x)
{
if(IsEmpty())
return false;
x=elements[front];
front=(front+1)%maxSize;
return true;
}
template
bool SeqQueue::getFront(T& x)const
{
if(IsEmpty())
return false;
x=elements[front];
return true;
}
template
ostream& operator<& rhs)
{
os<
SeqQueue::SeqQueue(const SeqQueue& rhs)
{
front=rhs.front;
rear=rhs.rear;
maxSize=rhs.maxSize;
T* dest=new T[maxSize];
T* src=rhs.elements;
elements=dest;
for(int i=0;i
SeqQueue& SeqQueue::operator=(const SeqQueue& rhs)
{
delete[] elements;
makeEmpty();
front=rhs.front;
rear=rhs.rear;
maxSize=rhs.maxSize;
T* dest=new T[maxSize];
T* src=rhs.elements;
elements=dest;
for(int i=0;i
테스트 코드:
int main(int argc, char* argv[])
{
SeqQueue s(5);
int a=1,b=2,c=3,d=4,e=0;
s.EnQueue(a);
s.EnQueue(b);
s.EnQueue(c);
s.EnQueue(d);
cout< s1(s),s2;
cout<
테스트 결 과 는 다음 과 같다.
front=0 rear=4
elements: 1 2 3 4
front=2 rear=4
elements: 3 4
getSize(): 2
IsEmpty(): false
IsFull(): false
getFront(): 3
front=2 rear=4
elements: 3 4
front=2 rear=4
elements: 3 4
. . .
주의사항:
1. 이 실현 은 동적 배열 에 저 장 된 순환 대기 열 로 논리 적 으로 하나의 링 을 구성 합 니 다.
2. rear 는 실제 팀 의 꼬리 위 치 를 가리 키 는 다음 위 치 를 가리 키 고 front 는 진정한 헤드 요소 가 있 는 위 치 를 가리킨다.
3. 초기 화 시 rear = front = 0
4. 빈 것 으로 추정: front = rear
5. 추정 가득: (rear + 1)% maxSize = front.
rear 가 front 의 이전 위 치 를 가리 키 면 대기 열 이 가득 차 있다 고 생각 하기 때문에 최대 max Size - 1 개의 요소 만 저장 할 수 있 습 니 다.이것 은 대열 이 비어 있다 는 추정 과 차 이 를 보이 기 위해 서다.
6. 대상 지정 1: front = (front + 1)% maxSize
7. 팀 끝 포인터 1: rear = (rear + 1)% max Size
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.