- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
环形缓冲区
2、实例:环形缓冲区的实现
环形缓冲区是数据通信程序中使用最为广泛的数据结构之一,下面的代码,实现了一个环形缓冲区:
/*ringbuf .c*/
#i ncludestdio. h
????#i ncludectype. 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}
{
cnt pos;
if (n0){
???????????Pos = iget;
???????????iget = addring(iget);
???????????n--;
???????????return buffer[pos];
}
else {
printf(“Buffer is empty\n”);
return 0.0;
}
/*?向环形缓冲区中放人一个元素*/
void put(double z)
{
if (nNMAX){
???????????buffer[iput]=z;
???????????iput = addring(iput);
???????????n++;
}
else
printf(“Buffer is full\n”);
}
int main{void)
{
chat opera[5];
double z;
do {
printf(“Please input p|g|e?”);
scanf(“%s”, opera);
???????????????switch(tolower(opera[0])){
???????????????case ‘p’: /* put */
??????????????????printf(“Please input a float number?”);
??????????????????scanf(“%lf”, z);
??????????????????put(z);
??????????????????break;
case ‘g’: /* get */
??????????????????z = get();
printf(“%8.2f?from Buffer\n”, z);
break;
case ‘e’:
??????????????????printf(“End\n”);
??????????????????break;
default:
??????????????????printf(“%s - Operation command error! \n”, opera);
}/* end switch */
}while(opera[0] != ’e’);
return 0;
}
文档评论(0)