1 - Circular Buffer / 环形缓冲区
Circular Buffer 又叫做 Ring Buffer,这里用C语言数组实现一个简单的环形缓冲区。
#include<stdio.h>
#include<ctype.h>
#define NMAX 8
int iput = 0; /* 环形缓冲区的当前放入位置 */
int iget = 0; /* 缓冲区的当前取出位置 */
int n = 0; /* 环形缓冲区中的元素总数量 */
double buffer[NMAX];
/* 环形缓冲区的地址编号计算函数,如果到达唤醒缓冲区的尾部,将绕回到头部。
* 环形缓冲区的有效地址编号为:0到(NMAX-1)
*/
int addring (int i) {
return (i+1) == NMAX ? 0 : i+1;
}
/* 从环形缓冲区中取一个元素 */
double get(void) {
int pos;
if (n > 0) {
pos = iget;
iget = addring(iget);
n--;
return buffer[pos];
} else {
printf("Buffer is empty\n");
return 0.0;
}
}
/* 向环形缓冲区中放入一个元素*/
void put(double z) {
if(n < NMAX) {
buffer[iput] = z;
iput = addring(iput);
n++;
} else {
printf("Buffer is fulln");
}
}
int main(void)
{
char opera[5];
double z;
do {
printf("Please input p|g|e?");
scanf("%s",&opera);
switch(tolower(opera[0])) {
case 'p': printf("Please input a float number?");
scanf("%lf", &z);
put(z);
break;
case 'g': z = get();
printf("%8.2f from Buffer/n", z);
break;
case 'e': printf("Endn");
break;
default: printf("%s - Operation command error! \n", opera);
}/* end switch */
} while(opera[0] != 'e');
return 0;
}
This work is licensed under a CC A-S 4.0 International License.