二人接力队列
一般循环队列的属性如下:
elements\textit{elements}elements:一个固定大小的数组,用于保存循环队列的元素。
capacity\textit{capacity}capacity:循环队列的容量,即队列中最多可以容纳的元素数量。
front\textit{front}front:队列首元素对应的数组的索引。
rear\textit{rear}rear:队列尾元素对应的索引的下一个索引。
一般循环队列的接口方法如下:
MyCircularQueue(int k)\texttt{MyCircularQueue(int k)}MyCircularQueue(int k):
enQueue(int value)\texttt{enQueue(int value)}enQueue(int value):
(rear+1) mod capacity(\textit{rear} + 1) \bmod capacity(rear+1)modcapacity。
deQueue()\texttt{deQueue()}deQueue():
(front+1) mod capacity(\textit{front} + 1) \bmod capacity(front+1)modcapacity。
Front()\texttt{Front()}Front():返回队首的元素,需要检测队列是否为空。
Rear()\texttt{Rear()}Rear():返回队尾的元素,需要检测队列是否为空。
isEmpty()\texttt{isEmpty()}isEmpty():检测队列是否为空,根据之前的定义只需判断 rear\textit{rear}rear 是否等于 front\textit{front}front。
isFull()\texttt{isFull()}isFull():检测队列是否已满,根据之前的定义只需判断 front\textit{front}front 是否等于 (rear+1) mod capacity(\textit{rear} + 1) \bmod \textit{capacity}(rear+1)modcapacity。
个人二人接力工作队列属性:
#define CHNUM1 0
#define CHNUM2 1
#define CHNUM3 2
int oneChannelMark;
int twoChannelMark;
个人二人接力工作队列接口方法:
//发送小人是否做完,可交给发送
int transferSame(int send,int recv)
{
if(send == recv)
return 1;
else
return 0;
}
//发送小人切换状态,开始工作
void transferCh(int send,int *recv)
{
if(transferSame(send,*recv))
{
if((*recv)==CHWORK1)
(*recv)=CHWORK2;
else
(*recv)=CHWORK1;
return 1;// Calculate at the same
}
else
{
return 0;
}
}