我最近正在研究循环缓冲区。我的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;