为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言模块源码 正文

易语言核心支持库编写高效率定长队列

三叶资源网 2019-07-19 22:35:45 易语言模块源码 1735 ℃ 2 评论

采用核心支持库基础代码编写,稳定高效,代码简洁明了,方便维护和升级,百万次压入弹出耗时94毫秒。先进先出模式!

在之前的版本上的一次升级,命令按照核心支持库中的“队列”进行了效仿,效率是核心支持库的N倍!

.版本 2
.支持库 EThread

.程序集 定长队列, , 公开
.程序集变量 队列数组, 整数型, , "1"
.程序集变量 私_队列长度, 整数型
.程序集变量 私_起始位置, 整数型
.程序集变量 私_结尾位置, 整数型
.程序集变量 私_临界许可, 整数型

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用

私_临界许可 = 创建进入许可证 ()

.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用

删除进入许可证 (私_临界许可)

.子程序 初始化队列, , 公开, '队列使用前要先初始化,初始化队列不支持线程安全。
.参数 队列长度, 整数型

私_队列长度 = 队列长度
重定义数组 (队列数组, 假, 队列长度)
进入许可区 (私_临界许可)
私_起始位置 = 0
私_结尾位置 = 0
退出许可区 (私_临界许可)

.子程序 压入, 逻辑型, 公开
.参数 队列值, 整数型

进入许可区 (私_临界许可)
.如果 (私_结尾位置 = 私_队列长度)
    .如果真 (私_起始位置 = 0 或 私_起始位置 = 1)  ' 判断一下弹出的位置在哪,避免压过界!
        退出许可区 (私_临界许可)
        返回 (假)
    .如果真结束
    私_结尾位置 = 1
    队列数组 [私_结尾位置] = 队列值
    退出许可区 (私_临界许可)
    返回 (真)
.否则
    .如果真 (私_结尾位置 + 1 = 私_起始位置)  ' 判断一下弹出的位置在哪,避免压过界!
        退出许可区 (私_临界许可)
        返回 (假)
    .如果真结束
    私_结尾位置 = 私_结尾位置 + 1
    队列数组 [私_结尾位置] = 队列值
    退出许可区 (私_临界许可)
    返回 (真)
.如果结束


.子程序 弹出, 逻辑型, 公开
.参数 接受数据, 整数型, 参考

进入许可区 (私_临界许可)
.如果真 (私_起始位置 = 0 且 私_结尾位置 = 0)  ' 判断一下 是否两个位置都没有变化
    退出许可区 (私_临界许可)
    返回 (假)
.如果真结束
.如果 (私_起始位置 = 私_队列长度)
    .如果 (私_结尾位置 = 0)  ' 结尾位置可以和起始位置一样,所以这里不需要判断 结尾位置是否等于1 判断是否等于0 就行 严谨
        退出许可区 (私_临界许可)
        返回 (假)
    .否则
        .如果真 (私_结尾位置 = 私_队列长度)  ' 判断一下弹出的位置在哪,避免压过界!结尾位置都没有从头开始,起始位置不能越界!
            退出许可区 (私_临界许可)
            返回 (假)
        .如果真结束

    .如果结束
    私_起始位置 = 1
    接受数据 = 队列数组 [私_起始位置]
    退出许可区 (私_临界许可)
    返回 (真)
.否则
    .如果真 (私_起始位置 = 私_结尾位置)  ' 如果两个一致 就没啥东西可以弹了
        退出许可区 (私_临界许可)
        返回 (假)
    .如果真结束
    私_起始位置 = 私_起始位置 + 1
    接受数据 = 队列数组 [私_起始位置]
    退出许可区 (私_临界许可)
    返回 (真)
.如果结束


.子程序 是否为空, 逻辑型, 公开

进入许可区 (私_临界许可)
.如果 (私_起始位置 = 私_结尾位置)
    退出许可区 (私_临界许可)
    返回 (真)
.否则
    退出许可区 (私_临界许可)
    返回 (假)
.如果结束


.子程序 取队列首节点, 逻辑型, 公开
.参数 接受数据, 整数型, 参考

进入许可区 (私_临界许可)
.如果 (私_起始位置 ≠ 私_结尾位置)
    接受数据 = 队列数组 [私_起始位置]
    退出许可区 (私_临界许可)
    返回 (真)
.否则
    退出许可区 (私_临界许可)
    返回 (假)
.如果结束


.子程序 取大小, 整数型, 公开
.局部变量 局_队列大小, 整数型

进入许可区 (私_临界许可)
局_队列大小 = 私_结尾位置 - 私_起始位置
退出许可区 (私_临界许可)
返回 (局_队列大小)

.子程序 清空, , 公开
.局部变量 局_计次, 整数型

进入许可区 (私_临界许可)
私_起始位置 = 0
私_结尾位置 = 0
退出许可区 (私_临界许可)

@糖心疼

文件下载


来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

已有2位网友发表了看法:

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
内存运行模块QQ看点评论AI文字转语音局域网扫描器模仿打字效果倒计时查大鱼号昵称IMAP收信工作记忆训练微博降权微信图片数据解密ICO图标生成独立cookies云的多文档窗口界面支持库黑客数字雨批量修改源码GIF表情包制作百度旋转识别源码微信公众号工具源码
最新评论