キュー
一方の端でのみ挿入を許可し、もう一方の端で削除を
許可します。行の終わり:挿入が許可されます。
行の先頭:削除
が許可されます。機能:FIFO
チームが空の状態:Q.rear == Q.front
チームがいっぱいの状態:(Q.rear +1)%MaxSize == Q.front
キュー要素番号:(rear + Maxsize-front)%Maxsize
typedef struct{
ElemType data[MaxSize]; //用静态数组存放队列元素
int front, rear; //队头,队尾指针
}SqQueue;
void InitQueue(SqQueue &Q){
Q.rear=Q.front= 0; //初始时 队头、队尾指针指向0
}
bool EnQueue(SqQueue &Q, ElemType x){
if (队列已满)
return false;
Q.data[Q.rear] = x; //将x插入队尾
Q.rear = Q.rear+1;//队尾指针加一
return true;
}
牛逼循环队列
bool EnQueue(SqQueue &Q, ElemType x){
if (队列已满)
return false;
Q.data[Q.rear] = x; //将x插入队尾
Q.rear = (Q.rear+1) % MaxSize;//队尾指针加一取余 循环队列
return true;
}
出队
bool DeQueue(SqQueue &Q, ElemType & x){
if(Q.rear == Q.front) //判断队空
return false;
x = Q.data[Q.front];
Q.front = (Q.front+1)% MaxSize;
return true;
}
查
bool GetHead(SqQueue Q, ElemType & x){
if(Q.rear == Q.front) //判断队空
return false;
x = Q.data[Q.front];
return true;
}
一般的な循環キューでは、キューがいっぱいか空かを判断するために領域を空にする必要がありますが、問題はあり
ません。
typedef struct{
ElemType data[MaxSize]; //用静态数组存放队列元素
int front, rear; //队头,队尾指针
int size;
}SqQueue;
サイズを使用して判断します。これにより、スペース
サイズを節約できます== MaxSize、フル
サイズ== 0、空
タグも使用できます
typedef struct{
ElemType data[MaxSize]; //用静态数组存放队列元素
int front, rear; //队头,队尾指针
int tag;
}SqQueue;
タグ= 0の場合、最近削除が実行され、
タグ= 1の場合、挿入が最近実行されました。
フロント==リア&&タグ== 1、满
フロント==リア&&タグ== 0、空