搜索
bottom↓
回复: 15

发一个纯数组搞的队列

[复制链接]

出0入0汤圆

发表于 2019-11-7 15:35:41 | 显示全部楼层 |阅读模式
          这几天在看C语言实现的队列,在网上找了一个别人的纯数组做的队列,没有用结构体和指针,感觉蛮好玩的。于是用C# 窗体程序模拟了一下,有兴趣的可以看看。
这个队列放在数组a中,其中a[0]存放数组中的最大队列数据个数,a[1]存放队列头的数组下标,a[2]存放当前队列数据个数。

出0入0汤圆

 楼主| 发表于 2019-11-7 15:36:16 | 显示全部楼层
这个是模拟软件界面

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-11-7 15:37:31 | 显示全部楼层
这个是C#工程文件,在VS2013调试通过。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-11-7 15:55:12 | 显示全部楼层
        private void CreateQueue(int [] buf ,int  length)
        {
            buf[0] = length;
            buf[1] = 3;
            buf[2] = 0;
         }

        private int GetDataFromQueue(int[] buf)
        {
            if (buf[2] == 0)
                return (int)QueueStatus.QUEUE_NODATA;
            int i;
            i = buf[buf[1]];
            buf[buf[1]] = 255;//255是人为定义的空标识
            buf[2]--;
            buf[1]++;
            if (buf[1] >= buf[0] + 3)
            {
                buf[1] = 3;
            }
            return (i);
        }
       QueueStatus InsertDataToQueue(int []buf, int dat)
        {
            int i;
            if (buf[2] == buf[0]) return QueueStatus.QUEUE_FULL;
            else
            {
                if (buf[1] + buf[2] < buf[0] + 3) i = buf[1] + buf[2];
                else i = buf[1] + buf[2] - buf[0];
            }
            buf[i] = dat;
            //buf[1]++;
            buf[2]++;
            return QueueStatus.QUEUE_OK;
        }

出0入0汤圆

 楼主| 发表于 2019-11-7 16:23:09 | 显示全部楼层
这个C文件,  是dev++ 环境下编译通过.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-11-7 19:04:40 来自手机 | 显示全部楼层
我记得C#有一种链表就是数组实现的

出0入0汤圆

发表于 2019-11-7 22:54:20 来自手机 | 显示全部楼层
先标记一下,下次慢慢学习学习

出140入115汤圆

发表于 2019-11-7 23:43:09 来自手机 | 显示全部楼层
有什么优点?

出0入0汤圆

 楼主| 发表于 2019-11-8 07:52:01 | 显示全部楼层

就是看上去简单,没用指针和结构体,呵呵。

出0入0汤圆

发表于 2019-11-8 17:33:01 | 显示全部楼层
原来这叫队列,我一直管这叫环形缓冲区,多模块之间进行数据传递,确实很好用

出0入0汤圆

 楼主| 发表于 2019-11-12 11:42:10 | 显示全部楼层
zyqcome 发表于 2019-11-7 19:04
我记得C#有一种链表就是数组实现的

这个没有用指针的灵活,但是简单,好玩,呵呵

出0入0汤圆

发表于 2019-11-12 12:29:25 来自手机 | 显示全部楼层
ldj7501 发表于 2019-11-12 11:42
这个没有用指针的灵活,但是简单,好玩,呵呵

没有抬杠的意思哈,我觉得两种实现各有优势,

指针实现可以更快的移动和大量增加数据

数组实现可以更快的查找,性能应该会更好

出0入0汤圆

 楼主| 发表于 2021-9-10 08:06:25 | 显示全部楼层
顶顶,哈哈

出1310入193汤圆

发表于 2021-9-10 09:56:52 | 显示全部楼层
原创吗   短小精悍  小资源的mcu最喜欢这样的方式

出0入17汤圆

发表于 2021-9-15 23:00:51 | 显示全部楼层

buf【1】为什么要初始化成3

出1310入193汤圆

发表于 2021-9-16 08:14:24 | 显示全部楼层
newuseruser 发表于 2021-9-15 23:00
buf【1】为什么要初始化成3

a[1]存放队列头的数组下标
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表