我最近正在研究循环缓冲区。我的API由4个函数组成,即入队、出队、长度和容量。现在我用一个大小为5的数组来实现它。然而,我不确定实施情况。对于入队,我有两个参数,即指向内存的指针和要入队的字节数。
对于退出队列,我计划将循环队列字节复制到缓冲区
队列的长度可以在结构成员的帮助下提取,该结构成员根据用户的函数调用和容量而递增或递减,因为这是静态内存分配。每次调用容量函数时,容量应相同。
然而,我对入队和出队的方式感到怀疑。欢迎提供任何指导。TIA公司
排队:
size_t q_enq(void*buf,size_t n字节){
//Error checking for buffer full
if(q.front == 0 && q.rear == size-1){
return 0;
}
//Second Error Check
if (q.rear + 1 == q.front){
return 0;
}
// BUffer Full, hence all the q.length is equal 256
if(q.length == size){
return 0;
}
//Invalid Input
if(nbytes == 0){
return 0;
}
// Invalid Input
if(nbytes > q.length){
return 0;
}
//initialize the buffer
while(q.rear<size){
memcpy(q.data,buf,1);
q.rear = (q.rear + 1) & (size - 1);
q.rear ++;
q.length = q.length + 1;
}
返回n字节;}
退出队列
size_t q_dq(void *buf, size_t nbytes){
if(q.front == q.rear){
return 0;
}
if(q.length == 0){
return 0
}
if(q.length >=nbytes && q.front > q.rear){
memcpy (buf, q.data[q.front],nbytes);
q.front = (q.front + 1) & (size - 1);
q.front --;
q.length = q.length - 1;
}
else{
}
return nbytes;