当前位置: 首页 > news >正文

网站栏目合理性订货商城小程序源码

网站栏目合理性,订货商城小程序源码,企业网站上海 优帮云,管理系统主页写在前面#xff0c;2023年11月开始进入岗位#xff0c;工作岗位是嵌入式软件工程师。2024年是上班的第一年的#xff0c;希望今年收获满满#xff0c;增长见闻。 数据结构—环形缓冲区 为什么要使用环形数组#xff0c;环形数组比起原来的常规数组的优势是什么#xf…写在前面2023年11月开始进入岗位工作岗位是嵌入式软件工程师。2024年是上班的第一年的希望今年收获满满增长见闻。 数据结构—环形缓冲区 为什么要使用环形数组环形数组比起原来的常规数组的优势是什么 环形数组Circular Array是一种特殊类型的数组其元素在内存中首尾相接形成一个环形。环形数组具有一些独特的优势和用途使其在某些应用场景中比常规数组更为适用。以下是一些使用环形数组的原因和优势 空间利用率高由于环形数组的元素在内存中是首尾相接的因此不需要为数组的头部和尾部留出额外的空间。这使得环形数组的空间利用率比常规数组更高。 高效的数据访问在环形数组中可以通过简单的模运算来确定一个元素在数组中的位置。这使得数据访问操作更加高效。 连续的数据结构环形数组保持了数据的连续性这有助于提高数据访问的局部性从而优化CPU缓存的性能。 避免数组越界问题由于环形数组的特性当索引超出数组的界限时会自动回到数组的开头或结尾避免了常规数组越界访问导致的错误。 循环队列和缓冲区实现环形数组可以方便地实现循环队列或缓冲区无需移动大量数据即可进行队首和队尾的添加与删除操作。 减少内存碎片由于环形数组的连续存储特性它可以更有效地利用内存空间减少内存碎片的产生。 易于实现动态扩展当需要增加更多元素时环形数组可以通过简单地扩展现有数组的大小来实现动态扩展而无需重新分配和复制原有数据。 c代码实现 #include stdio.h #include stdlib.h #include stdbool.h #define BUFFER_SIZE 5 // 定义环形缓冲区的大小 typedef struct { int buffer[BUFFER_SIZE]; // 缓冲区数组 int head; // 指向缓冲区中第一个元素的位置 int tail; // 指向缓冲区中下一个要写入元素的位置 } CircularBuffer; // 初始化环形缓冲区 void init_circular_buffer(CircularBuffer *cb) { cb-head 0; cb-tail 0; for (int i 0; i BUFFER_SIZE; i) { cb-buffer[i] 0; // 可以选择性地初始化缓冲区的内容 } } // 检查环形缓冲区是否为空 bool is_circular_buffer_empty(CircularBuffer *cb) { return cb-head cb-tail cb-buffer[cb-head] 0; // 如果头和尾相等且头部元素为空则认为缓冲区为空 } // 检查环形缓冲区是否已满 bool is_circular_buffer_full(CircularBuffer *cb) { return (cb-tail 1) % BUFFER_SIZE cb-head; // 如果下一个要写入的位置是头部则认为缓冲区已满 } // 向环形缓冲区中插入一个元素 bool insert_into_circular_buffer(CircularBuffer *cb, int value) { if (is_circular_buffer_full(cb)) { return false; // 缓冲区已满无法插入新元素 } cb-buffer[cb-tail] value; // 在尾部插入新元素 cb-tail (cb-tail 1) % BUFFER_SIZE; // 更新尾部指针到下一个位置 return true; // 插入成功 } // 从环形缓冲区中移除一个元素并返回它 int remove_from_circular_buffer(CircularBuffer *cb) { if (is_circular_buffer_empty(cb)) { return -1; // 缓冲区为空无法移除元素返回错误代码或特殊值 } int value cb-buffer[cb-head]; // 获取头部元素的值 cb-buffer[cb-head] 0; // 可选将移除的元素置零根据具体需求决定是否需要这一步 cb-head (cb-head 1) % BUFFER_SIZE; // 更新头部指针到下一个位置 return value; // 返回被移除的元素值 } int main() { CircularBuffer cb; // 声明一个环形缓冲区变量 init_circular_buffer(cb); // 初始化环形缓冲区 // 向缓冲区中插入一些元素并检查其状态 for (int i 1; i 6; i) { // 尝试插入6个元素但缓冲区大小只有5所以会有一个插入失败 if (!insert_into_circular_buffer(cb, i)) { printf(Failed to insert element %d because the buffer is full.\n, i); } } // 从缓冲区中移除一些元素并打印它们的值 for (int i 0; i 6; i) { // 尝试移除6个元素但只插入了5个所以会有一个移除返回特殊值这里是-1 int value remove_from_circular_buffer(cb); if (value -1) { printf(Failed to remove element because the buffer is empty.\n); } else { printf(Removed element: %d\n, value); } } return 0; }运行结果
http://www.pierceye.com/news/967820/

相关文章:

  • php企业网站源码软件工程师发展前景
  • 如何从建设局网站上更换职称人员哪个网站可以免费做国外网站
  • 情侣博客网站模板下载学校网站建设调查报告
  • 平台网站开发是什么意思全屏的网站
  • 素材图库网站源码网站建设及推广培训班
  • 英国电商网站jsp旅游网站开发系统
  • 机关网站建设引导语开发一个企业网站需要多少钱
  • 徐汇网站推广挣钱最快的小游戏
  • 手机网站开发的目的在线免费看影视网站
  • 湖州网站设计wordpress自动删除p标签
  • 昆明几大网站学生网站建设实训总结
  • 丽江手机网站建设建设公司起名大全
  • seo网站分析工具wordpress的安装包
  • 北京网站建设报价表徐州专业做网站
  • 怎样做网站卖网站国内免费开源crm
  • wordpress多语言网站济宁住房和城乡建设厅网站
  • 免费crm网站下载网站建设 繁体
  • 东莞企业官方网站建设网站建设对产品推销作用大吗
  • php网站路径问题站长工具权重查询
  • 箱包官方网站模板摄影后期教程网站
  • iis 手机网站同域名网站改版需要把之前网站里的文章都拷贝过来吗?
  • 网站是专门对生活中的一些所谓常识做辟谣的商标设计网站排行
  • seo网站设计营销工具抽奖网站插件
  • 家装设计网站大全网站建设用哪个好
  • 青海企业网站建设企业建设网
  • 电子商务网站环境建设怎么劝客户做网站
  • 山西教育学会的网站建设网站投放广告教程
  • 游戏网站的设计方案做装修业务呢有多少网站
  • 口碑好网站建设公司电话百度联盟网站备案信息
  • 网站建设排行公司建筑网页设计详情