亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

【數據結構】 出棧序列的合法性【面試】

發布時間:2020-06-11 10:08:44 來源:網絡 閱讀:502 作者:Vs呂小布 欄目:編程語言

之前我們對棧已經有所了解,先進后出,后進先出這是棧的兩大特性,那么,我們經常會碰到這種題,例:

有一組元素abcdef,按先后順序進棧,那么出棧時哪些情況是非法的?

A.   fedcba

B.   abdcef

C.   acbdef

D.   abcdef

選哪個呢???

很明顯,根據棧的兩大特性:先進后出,后進先出,即可判斷,答案:C

剖析: 先看C選項acb這樣的出棧序列,那么進棧肯定是abc,那么顯然出棧時c肯定不會在b之前,就這么簡單。用代碼實現這個合法性的判斷,當然也是比較容易的,只要思路邏輯清楚,就沒有問題。



代碼如下:

#include <iostream>
#include <stack>
#include <cassert>
using namespace std;

bool isLegalSequence(const char* Push_seq,const char* Pop_seq)
{
    assert(Push_seq);
    assert(Pop_seq);

    //判斷出入棧序列長度是否相等
    if ( strlen(Push_seq) != strlen(Pop_seq) ) 
        return false;

    stack<char> stk;
    while ( *Push_seq)
    {
        // 先判斷棧是否為空,然后判斷棧頂元素是否和出棧序列的元素相同
        if (0 == stk.size() || stk.top() != *Pop_seq)
        {
            stk.push(*Push_seq++); // 不相同就壓棧,繼續向后找
        }
        else
        {
            stk.pop(); //找到相同的,出棧
            ++Pop_seq; //跳到出棧序列的下一個元素驗證
        }
    }

    while (stk.size()) // 將剩余的出棧序列元素判斷
    {
        if (stk.top() != *Pop_seq)
        {
            return false;
        }
        stk.pop();
    }

    return true;
}

int main()
{
    char* str1 = "abcdef";
    char* str2 = "baedcf";
    cout << ( isLegalSequence(str1, str2) ? "yes" : "no" ) << endl;

    system("pause");
    return 0;
}

由于系統的棧是現成的,我們可以直接拿來使用,這樣問題大大簡化,具體的實現步驟過程,代碼中也有注釋,簡單易懂。

向AI問一下細節

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

AI

宜兰县| 黎城县| 清水河县| 吉安市| 三门县| 西宁市| 新乡市| 高阳县| 长汀县| 吉林省| 延吉市| 新民市| 桦川县| 米脂县| 五指山市| 锦屏县| 始兴县| 巨野县| 鸡西市| 潞西市| 乐亭县| 什邡市| 盘山县| 奉新县| 涟源市| 阿坝| 香河县| 忻城县| 叶城县| 南通市| 梁平县| 北碚区| 理塘县| 蒙山县| 府谷县| 贵阳市| 射洪县| 宁津县| 云霄县| 抚远县| 香河县|