데이터 구조 대기 열 (배열)
2921 단어 데이터 구조
대기 행렬 과 스 택 이 유사 한 이상 모두 제 한 된 선형 표 이다. 그러면 그들 은 모두 빈 칸 을 판정 하고 가득 채 우 며 압착 값, 추출 값, 삭제 값 등 기본 적 인 조작 이 있어 야 한다. 다른 것 은 대기 행렬 이 양쪽 에서 서로 다른 조작 을 하도록 제한 하고 모든 팀 의 데이터 구성원 은 지시 팀 의 머리 와 지시 팀 의 끝 에 있 는 두 개의 지침 이 있어 야 하 며 요 소 를 저장 하 는 배열 로 구성 되 어야 한다.
팀 의 종 류 는 다음 과 같 습 니 다.
//
typedef int QueueElement;
#define maxs 100
class Queue
{
public :
Queue ();
bool empty () const;
bool full () const;
void enqueue (const QueueElement & value);
void display (ostream &out) const;
void dequeue ();
QueueElement front () const;
private :
int myFront;
int myBack;
QueueElement myArray[maxs];
};
//
typedef int QueueElement;
class Queue
{
public :
Queue (int number=10);
~Queue ();
Queue (const Queue & original);
const Queue & operator = (const Queue &right);
bool empty () const;
bool full () const;
void enqueue (const QueueElement & value);
void dequeue ();
QueueElement front () const;
private :
int myFront;
int myBack;
int myCount; //
QueueElement * myArray;
};
현재 대기 열 이 비어 있 는 지 판단 하 는 기본 동작 을 고려 하고 있 습 니 다. 대기 열 에 하나의 요 소 를 포함 하면 이 요 소 는 반드시 배열 의 my Front 위치 에 있 고 my Back 은 그 다음 위치 에 있 습 니 다.이 요소 가 삭제 되면 my Front 에서 한 자 리 를 옮 깁 니 다. 이때 my Front = = my Back 은 반드시 성립 됩 니 다.모든 판단 대 열 이 비어 있 는 지 여 부 는 my Front = = my Back;
그러나 순환 대기 열 에서 알 수 있 듯 이 대기 열 이 가득 찼 을 때 도 반드시 my Front = = = my Back 이 설립 되 었 을 때;그러나 우 리 는 순환 대기 열 에 빈 자리 가 있다 고 가정 합 니 다. 이때 my Front 와 my Back 는 반드시 한 단위 차이 가 있 을 것 입 니 다.그러면 my Back '이 뒤로 이동 할 때 my Front 와 같 습 니 다. 이때 대기 열 이 가득 차 서 통과 할 수 있 습 니 다. myFront==(myBack +1) % myCount 대기 열 이 가득 찼 는 지 같은 지 판단 하기;
기타 기본 동작 은 구체 적 인 코드 를 보십시오.
Queue::~Queue () { delete [] myArray;}
//
const Queue & Queue::operator = (const Queue & right)
{
if (this!=&right)
{
if (myCount != right.myCount)
{
delete [] myArray;
myCount = right.myCount;
myArray = new (nothrow) QueueElement[myCount];
if (myArray==0)
cerr << "ERROR
";
else
{
myFront=right.myFront;
myBack=right.myBack;
for (int i=myFront; i!=myBack; i=(i+1)%myCount)
myArray[i] = right.myArray[i];
}
}
}
return *this;
}
//
Queue::Queue (const Queue & original) : myFront(original.myFront),myBack(original.myBack),myCount(original.myCount)
{
myArray = new (nothrow) QueueElement[myCount];
if (myArray)
{
for (int i=myFront; i!=myBack; i=(i+1)%myCount)
myArray[i] = original.myArray[i];
}
else
{
cerr<
테스트 코드:
int main ()
{
Queue s(10);
cout << "created a queue,Empty ?
"<> num;
for (int i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.