环型缓冲区

昨天英伟达的笔试有考到 环形缓冲区,用数组或链表实现都可以,要求写出代码实现

在网上找了下这个数组实现方式可以参考一下。

还有一题是判断大小端,这个题在面深信服的时候也有问到。

定义一个union

union biglittle {

int a;

short b ;

char c;

}

union biglittle x;

x.a=1;

if(x.c)  printf("little edian\n")

else printf("big edian\n");

大概是这个样子。

今天在<linux 0.01内核分析与操作系统设计----创造你自己的操作系统>看到了一个环型缓冲区的是实现,代码简单,实现了基本功能.环型缓冲区是数据通信程序中使用最为广泛的数据结构之一.

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #define NMAX    8
  4. //环形缓冲区的初始化
  5. int iput=0;//环型缓冲区的当前写入位置
  6. int iget=0;//环型缓冲区的当前读出位置
  7. int n=0;//环型缓冲区元素总数量
  8. double buffer[NMAX];
  9. //环型缓冲区的地址编号计算函数,如果到达唤醒缓冲区的尾部,将饶回到头部。
  10. //缓型缓冲区的有效编号为:0 到 (NMAX-1)
  11. int addring(int i)
  12. {
  13.     return ((i+1)==NMAX) ? 0 : i+1;
  14. }
  15. //从环型缓冲区中取一个元素
  16. double get(void)
  17. {
  18.     int pos;
  19.     if(n>0)
  20.     {
  21.         pos=iget;
  22.         iget=addring(iget);
  23.         n--;
  24.         return buffer[pos];
  25.     }
  26.     else
  27.     {
  28.         printf("Buffer is empty/n");
  29.         return 0.0;
  30.     }
  31. }
  32. //向环型缓冲区中放入一个元素
  33. void put(double z)
  34. {
  35.     if(n<NMAX)
  36.     {
  37.         buffer[iput]=z;
  38.         iput=addring(iput);
  39.         n++;
  40.     }
  41.     else
  42.     {
  43.         printf("Buffer is full /n");
  44.     }
  45. }
  46. int main(int argc,char *argv[])
  47. {
  48.     char opera[5];
  49.     double z;
  50.     do
  51.     {
  52.         printf("Please input p|g|e?");
  53.         scanf("%s",&opera);
  54.         switch( tolower(opera[0]) )
  55.         {
  56.          case 'p'://put
  57.                 printf("Please input a double number?");
  58.                 scanf("%lf",&z);
  59.                 put(z);
  60.                 break;
  61.          case 'g'://get
  62.                 z=get();
  63.                 printf("8.2f from buffer/n",z);
  64.                 break;
  65.          case 'e':
  66.                 printf("End /n");
  67.                 break;
  68.          default:
  69.                  printf("%s-Operation command error! /n",opera);
  70.                  break;
  71.         }
  72.     }
  73.     while(opera[0]!='e');
  74.  return 0;
  75. }

这个程序最让我学习的地方就是do{}while()的结构.

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值