順序表(順序儲存)迴圈佇列類(初始化,入隊,退隊,輸出排頭與排尾指標及元素)

小許發表於2012-07-28
迴圈佇列類:檔名 sq_Queue.h
判斷佇列有無資料根據s的值可判斷,如果s=0,則說明為空,反之,不為空時,還要判斷是否為滿,滿的條件是(s==0&&(rear==front));
注意:入隊與出隊,rear和front 都是加1;
#include <iostream>
using namespace std;
template <class T>
class sq_Queue
{
private:
	int mm;//儲存空間容量
	int front;
	int rear;
	int s;//標誌
	T * q;
public:
	sq_Queue(int);
	void prt_sq_Queue();
	int flag_sq_Queue();
	void ins_sq_Queue(T);
	T del_sq_Queue();
};
template <class T>
sq_Queue<T>::sq_Queue(int m)
{
	mm=m;
	q=new T[mm];
	front=mm;
	rear=mm;
	s=0;
	return;
}
template <class T>
void sq_Queue<T>::prt_sq_Queue()
{
	int i;
	cout<<"front="<<front<<endl;
	cout<<"rear="<<rear<<endl;
	if(s==0)
	{
		cout<<"佇列空"<<endl;
		return;
	}
	i=front;
	do 
	{
		i=i+1;
		if(i==mm+1)
			i=1;
		cout<<q[i-1]<<endl;

	} while (i!=rear);
	return;
}
template <class T>
int sq_Queue<T>::flag_sq_Queue()
{
	if((s==1)&&(rear==front))
	{
		cout<<"佇列滿"<<endl;
		return (-1);

	}
	if(s==0)
	{
		cout<<"佇列空"<<endl;
		return 0;
	}
	return 1;
}
template <class T>
void sq_Queue<T>::ins_sq_Queue(T b)
{
	if((s==1)&&(rear==front))
	{
		cout<<"Queue overflow"<<endl;
		return;
	}
	rear=rear+1;
	if(rear==mm+1)rear=1;
	q[rear-1]=b;
	s=1;
	return;
}
template <class T>
T sq_Queue<T>::del_sq_Queue()
{
	T y;
	if(s==0)
	{
		cout<<"queue is empty"<<endl;
		return (0);
	}
	front=front+1;
	if(front==mm+1)//特別要注意等號“==”而不是“=“
		front=1;
	y=q[front-1];
	if(rear==front)
		s=0;
	return y;
}


2.具體事例:檔名test3.cpp

#include "sq_Queue.h"
#include <stdlib.h>
int main()
{
	sq_Queue<int> q(10);
	cout<<"輸出排頭與隊尾指標已經隊中元素"<<endl;
	q.prt_sq_Queue();
	q.ins_sq_Queue(50);
	q.ins_sq_Queue(60);
	q.ins_sq_Queue(70);
	q.ins_sq_Queue(80);
	q.ins_sq_Queue(90);
	q.ins_sq_Queue(100);
	cout<<"輸出排頭與隊尾指標已經隊中元素"<<endl;
	q.prt_sq_Queue();
	cout<<"輸出退隊元素"<<endl;
	cout<<q.del_sq_Queue()<<endl;
	cout<<q.del_sq_Queue()<<endl;
	cout<<q.del_sq_Queue()<<endl;
	cout<<"再次輸出排頭與隊尾指標已經隊中元素"<<endl;
	q.prt_sq_Queue();
	system("pause");//可能是我的vs2010有點問題,ctrl+F5的結果一閃而過,以此採取此方法	
return 0;

}

3.實驗結果

輸出排頭與隊尾指標已經隊中元素
front=10
rear=10
佇列空
輸出排頭與隊尾指標已經隊中元素
front=10
rear=6
50
60
70
80
90
100
輸出退隊元素
50
60
70
再次輸出排頭與隊尾指標已經隊中元素
front=3
rear=6
80
90
100
請按任意鍵繼續. . .



 

相關文章