首页 > 编程语言 >先进先出算法

先进先出算法

时间:2024-04-17 20:44:24浏览次数:28  
标签:触发 END 入栈 算法 FALSE array 先进先出 指针

一、意义目的

  • 解决多个多个呼叫一个应答问题。
  • 如何排队,如何出队。
  • 常用于缓存多个请求,保持队列,先进先出。
  • 好处是有顺序,但是可以结合实际,比如位置比较近要先出,可以将“先进先出”作为排队出队子算法,再去排序,达到效率最高。

二、原理:使用数组改变下标方式存入,出栈把后面变量一个一个往前移动覆盖。

  • 采用触发存入方式,存入值不能等于0或与之前存入值相同,否则不能存入。“20”为堆栈个数可以采用变量。
  • 入栈最后一个存入值为新值且满足入队条件,则如果触发会持续覆盖栈尾。所以入队的存入值需要固定,防止栈尾错乱。
  • 出栈与入栈方式相同。往前移动。
#TRIG[0](CLK := #入栈触发,
         Q => #入栈触发脉冲);
IF #入栈触发脉冲 THEN;
    #相同标志 := FALSE;
    FOR #i1 := 0 TO 20 DO
        //堆栈数据判断,有重复不写入   
        IF #入栈值 <> 0 AND #入栈值 = #array[#i1] THEN
            #相同标志 := TRUE;
        END_IF;
    END_FOR;
    #不重复存储:=NOT(#相同标志);
    #入栈触发 := FALSE;
END_IF;
IF #不重复存储 THEN;
    #array[#指针] := #入栈值;
    IF #指针 <= 20 THEN;
        #指针 := #指针 + 1;
    END_IF;
    #相同标志 := FALSE;
    #不重复存储 := FALSE;
END_IF;
#TRIG[1](CLK := #出栈触发,
         Q => #出栈触发脉冲);
IF #出栈触发脉冲 THEN;
    #出栈值 := #array[0];
    FOR #I := 0 TO #指针 DO
        IF #I <= 20 THEN
            #array[#I] := #array[#I + 1];
            #array[#I+1] := 0;//出栈后清零
        END_IF;
    END_FOR;
    IF #指针 > 0 THEN
        #指针 := #指针 - 1;
    END_IF;
    #出栈触发 := FALSE;
END_IF;
IF #清除栈数据 THEN ;   //清除栈数据
    #array := #array空数组;
    #指针 := 0;
    #入栈值 := 0;
    #出栈值 := 0;
    #清除栈数据:=FALSE;
    #相同标志 := FALSE;
    #不重复存储 := FALSE;
END_IF;
#堆栈数据 := #array;
#存储个数 := #指针;
    

 

标签:触发,END,入栈,算法,FALSE,array,先进先出,指针
From: https://www.cnblogs.com/nycgood/p/18141750

相关文章

  • 复杂网络社区发现算法聚类分析全国电梯故障数据和可视化:诊断电梯“安全之殇”|附代码
    参考原文:http://tecdat.cn/?p=2186最近我们被客户要求撰写关于复杂网络社区发现算法的研究报告,包括一些图形和统计输出。物业工程肩负着维持项目各类设施设备的正常运作,保障全体业主的正常生活,令物业保值升值,是项目的心脏部门。拓端数据(tecdat)研究人员根据全国电梯故障上报汇总......
  • 29天【代码随想录算法训练营34期】第七章 回溯算法part05 (491.递增子序列 * 46.全排
    491.递增子序列如果在最前面加一个uset=set(),这个就是给这一层一个usedset,很好用,不错classSolution:deffindSubsequences(self,nums:List[int])->List[List[int]]:result=[]self.backtracking(nums,[],result,0)returnresult......
  • 算法
    冒泡:选择:插入:希尔:归并:快速:堆:计数:桶:基数:......
  • js 搜索查找算法
    线性查找线性查找是最简单的一种查找算法,它的基本思想是从头到尾遍历待查找的数据集,找到对应的元素,时间复杂度为O(n)。代码实现:functionlinearSearch(arr,target){for(leti=0;i<arr.length;i++){if(arr[i]===target){returni;......
  • KMP算法 Java实现
    Problem:28.找出字符串中第一个匹配项的下标目录解题方法思路构建next数组回溯查找复杂度Code解题方法构建next串回溯查找next串,最后下标思路通过最大前缀后缀能找到下一次未查找到后要回溯的位置构建next数组无论如何第一个数的下一次回溯位置肯定是0,因此next[......
  • Python 数据结构和算法实用指南(三)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第七章:哈希和符号表我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整数,因此快速且易于操作。但是,它们并不总是对我们很有效......
  • Python 数据结构和算法实用指南(一)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0前言数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程实现经验。它专为初学者和中级水平的研究Python编......
  • Python 数据结构和算法实用指南(二)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第四章:列表和指针结构我们已经在Python中讨论了列表,它们方便而强大。通常情况下,我们使用Python内置的列表实现来存储任何数据。然而,在本章中,我们将了解列表的工作原理,并将研......
  • js带注释的冒泡排序算法
    一、简述冒泡排序(BubbleSort)是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果二者的顺序(如从大到小、首字母从A到Z)错误就交换。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法......
  • 基于Redis实现基本抢红包算法
    简介:[key,value]的缓存数据库,Redis官方性能描述非常高,所以面对高并发场景,使用Redis来克服高并发压力是一个不错的手段,本文主要基于Redis来实现基本的抢红包系统设计.发红包模块:1:发红包模块流程图如下:  用户首先输入红包金额和红包个数,然后生成当前红......