91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c#如何實現棧的壓入、彈出序列

發布時間:2022-01-15 14:20:24 來源:億速云 閱讀:203 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關c#如何實現棧的壓入、彈出序列,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1、2、3、4、5是某棧的壓棧順序,序列4、5、3、2、1是該壓棧序列對應的一個彈出序列,但4、3、5、1、2就不可能是該壓棧序列的彈出序列。

    首先,可以在第一個序列也就是壓棧順序中找第二個序列中第一個元素,是4,因為第二個序列中第一個元素是第一個被彈出的,那么在壓入順序中,被彈出數據之前的所有數據都被壓入了棧中且還沒有被彈出,也就是連續壓進去了1、2、3、4,然后彈出第一個數據4;之后在第二個序列中往后的元素,是5,如果不是棧頂元素就在第一個序列中從4開始往后找繼續壓入再彈出,再次往后取第二個序列中的元素,如果是棧頂元素就彈出,直到棧空且兩個序列都遍歷一遍為止,否則,如果棧不為空且兩個序列都遍歷過了,則說明第二個序列不是壓棧序列的彈出序列。

程序設計如下:

#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;

bool IsPopSeq(int *push_arr, int *pop_arr, size_t size)
{
    assert(push_arr && pop_arr && size);//判斷參數的有效性
    stack<int> s;

    size_t push_index = 0;
    size_t pop_index = 0;
    while(pop_index < size)
    {
    //將輸入隊列中處于輸出隊列第一個元素之前的所有元素都壓入棧內   
        while(push_index < size)
        {
            s.push(push_arr[push_index]);
            ++push_index;
            if(s.top() == pop_arr[pop_index])
                break;
        }
        //判斷,如果輸入隊列全部壓完了但仍然沒有找到輸出隊列的的第一個元素,就返回false
        if((!s.empty()) && (s.top() != pop_arr[pop_index])) 
            return false;

        //當棧中的元素恰好就是輸出隊列的彈出順序時就不斷的彈出
        while((!s.empty()) && (pop_arr[pop_index] == s.top()))
        {
            s.pop();
            ++pop_index;
        }
    }   
    //正確返回的條件就是當輸入隊列和輸出隊列都遍歷完畢且棧為空時判斷完成
    if((push_index == size) && (pop_index == size) && s.empty())
        return true;
    else
        return false;
}

int main()
{
    int push_arr[] = {1, 2, 3, 4, 5};

    int pop_arr1[] = {4, 5, 3, 2, 1};
    int pop_arr2[] = {4, 3, 5, 1, 2};
    int pop_arr3[] = {2, 5, 3, 4, 1};

    size_t size = sizeof(push_arr)/sizeof(push_arr[0]);

    bool ret = IsPopSeq(push_arr, pop_arr1, size);
    cout<<ret<<endl;
    ret = IsPopSeq(push_arr, pop_arr2, size);
    cout<<ret<<endl;
    ret = IsPopSeq(push_arr, pop_arr3, size);
    cout<<ret<<endl;

    return 0;
}

運行程序:

c#如何實現棧的壓入、彈出序列

從上面的數組可以判斷結果分別為true,false,false。

《完》

關于“c#如何實現棧的壓入、彈出序列”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

无为县| 克拉玛依市| 泽普县| 海口市| 平安县| 青海省| 和静县| 邢台县| 台中县| 奇台县| 桂东县| 卓资县| 资兴市| 昌图县| 洛南县| 龙岩市| 盐边县| 法库县| 黎平县| 化隆| 工布江达县| 青铜峡市| 连云港市| 正安县| 泽州县| 娄烦县| 上杭县| 仙游县| 和龙市| 台东市| 新乡县| 湘乡市| 清远市| 克拉玛依市| 视频| 辽阳县| 喀喇| 蕲春县| 昆明市| 新沂市| 鲁山县|