1. 程式人生 > >實驗四:順序佇列(迴圈佇列)和鏈佇列

實驗四:順序佇列(迴圈佇列)和鏈佇列

#ifndef CirQueue_H  
#define CirQueue_H  
  
const int QueueSize=100;  //定義儲存佇列元素的陣列的最大長度  
  
template         //定義模板類CirQueue  
class CirQueue  
{  
public:  
    CirQueue( );        //建構函式,置空隊  
    ~ CirQueue( );               //解構函式  
    void EnQueue(DataType x);           //將元素x入隊  
    DataType DeQueue( );                //將隊頭元素出隊  
    DataType GetQueue( );               //取隊頭元素(並不刪除)  
    int Empty( );               //判斷佇列是否為空  
private:  
    DataType data[QueueSize];           //存放佇列元素的陣列  
    int front, rear;    //隊頭和隊尾指標,分別指向隊頭元素的前一個位置

和隊尾元素的位置  
};  
  
#endif  


#include "CirQueue.h"  

template   
CirQueue::CirQueue( )   
{  
    front=rear=QueueSize-1;  
}   

template   
CirQueue::~CirQueue( )  
{  
  
} 

template    
void CirQueue::EnQueue(DataType x)  
{  
    if ((rear+1) % QueueSize ==front) throw "上溢";  
    rear=(rear+1) % QueueSize;   //隊尾指標在迴圈意義下加1  
    data[rear]=x;                //在隊尾處插入元素  
}  

template    
DataType CirQueue::DeQueue( )  
{  
    if (rear==front) throw "下溢";   
    front=(front+1) % QueueSize;    //隊頭指標在迴圈意義下加1  
    return data[front];             //讀取並返回出隊前的隊頭元素,注意

隊頭指標  
}  

template   
DataType CirQueue::GetQueue( )  
{     
    int i;
    if (rear==front) throw "下溢";   
    i=(front+1) % QueueSize;  //注意不要給隊頭指標賦值  
    return data[i];  
}  

template 
int CirQueue::Empty( )   
{  
    if (front==rear)   
        return 1;   
    else   
        return 0;  
}  



#include
using namespace std;
#include "CirQueue.cpp"

void main()
{
	CirQueueQ;
	if (Q.Empty())
		cout<<"佇列為空"<