zoukankan      html  css  js  c++  java
  • 环形缓冲区: ringbuf.c

    #cat  aa.c
    /*ringbuf .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
    ");
    		return 0.0;
    	}
    }
    
    /* 向环形缓冲区中放入一个元素*/
    void put(double z)
    {
    	if (n<NMAX) {
    		buffer[iput]=z;
    		iput = addring(iput);
    		n++;
    	} else {
    		printf("Buffer is full
    ");
    	}
    }
    
    int main(void)
    {
    	char 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
    ", z);
    					break;
    				case 'e':
    					printf("End
    ");
    					break;
    				default:
    					printf("%s - Operation command error! 
    ", opera);
    			}/* end switch */
    	} while(opera[0] != 'e');
    
    	return 0;
    }
    
  • 相关阅读:
    inner join和join
    Java输入输出流
    数据库基础——并发控制
    逻辑题
    数据库基础——数据库设计
    JDBC
    XmlHttpRequest
    servlet乱码
    Tomcat缺少服务
    poj2388---求奇数个数字的最中间的数
  • 原文地址:https://www.cnblogs.com/muahao/p/8176596.html
Copyright © 2011-2022 走看看