[js]數組棧和隊列操作


寫在前面

在項目中,對數組的操作還是比較常見的,有時候,我們需要模擬棧和隊列的特性才能實現需求,這里記錄一下這個知識點。

棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

棧是限定僅在表頭進行插入和刪除操作的線性表。

就好比:一個死胡同,前面是“此路不通”,只有一個入口,如果一隊人進入,只能隊尾變對首出去。

在js中如何模擬?

<script>
        var arr = [];
        for (var i = 0; i < 5; i++) {
            var temp = i + 1;
            arr.push(temp);
            console.log(temp + "  入棧");
            console.log(arr);
        }
        console.log('棧,先進后出');
        /*
          這個地方需要注意,因為在出棧的過程arr.length是變化的,每移除一個元素,arr.length就會減一
        ,所以需要將其賦值給一個變量
        */
        var len = arr.length;
        for (var i = 0; i < len; i++) {
            console.log(arr.pop());
        }
    </script>

 結果

 隊列

隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

就好比:現在這個胡同不是死胡同了,隊伍可以直接通過。

   <script>
        var arr = [];
        for (var i = 0; i < 5; i++) {
            var temp = i + 1;
            arr.unshift(temp);
            console.log(temp + "  插入");
            console.log(arr);
        }
        console.log('隊列,先進先出 First In First Out');
        /*
          這個地方需要注意,因為在刪除的過程arr.length是變化的,每移除一個元素,arr.length就會減一
        ,所以需要將其賦值給一個變量
        */
        var len = arr.length;
        for (var i = 0; i < len; i++) {
            console.log(arr.pop());
        }
    </script>

 結果

總結

 首先要明白棧和隊列的區別,然后要知道js中,入棧:push 出棧:pop方法,隊列:ushift和pop方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM