데이터 구조 대기 열 (배열)

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

좋은 웹페이지 즐겨찾기