Интервью вопросы: два стека аналогового моделирования очереди очередей && два стеки

Два стека аналоговых очереди (интервью вопросов leetcode 09)

Решение: Определение стека s1 и s2, команда пут s1, команда затем взять приоритет s2, то s1 s2 все пусто Go s2, то взять.

S1, суффикс, соответствующий разряд тока, s2 разрядного тока префикса.

класс CQueue {
 общественный : 

    стек < INT > s1, s2; 
    CQueue () { 
    } 
    
    недействительными appendTail ( INT значение) { 
        s1.push (значение); 
    } 
    
    INT deleteHead () {
         если (s1.empty () && s2.empty) ()   возвращение - 1 ;
        если (s2.empty ()) 
        { в 
            то время как (! s1.empty ()) 
            { 
                s2.push (s1.top ()); 
                s1.pop (); 
            } 
        } 
        INT TMP =s2.top (); 
        s2.pop (); 
        вернуться TMP; 
    } 
};

Два аналоговых очереди стеки (leetcode225)

Решение: Рисунок: элемент в очереди А. Стек: Очередь А определяется ли число элементов 1, 1, если она равна, то очередь, если А больше, чем один элемент, элемент А будет помещен в очередь и DEQUEUE этой очереди B, до очереди а является левой элемент, то очередь очередь, в противном случае, а является пустым, то таким же образом, пока Б к не оставил передачу.

Другой подход: использование очереди, лучше, прямой стек толчок, выскочить из п-1 до команды снова нажать, эквивалентен цикл.

# include <бит / STDC ++ ч.>
 с использованием  пространства имен STD; 

класс MyStack {
 частное : 
    очереди < INT > q1, q2;
общественности :
     / * * Initialize ваша структура данных здесь. * / 

    MyStack () { 

    } 

    / * * Нажмите элемент й на стек. * / 
    Недействительным толчок ( INT х) { 
        q1.push (х); 
    } 

    / * * Удаляет элемент на вершине стека и возвращает этот элемент. * / 
    INT поп () {
         INT RET;
        если(q1.empty () && q2.empty ())   возвращение - 1 ;
        INT SZ = q1.size ();
        если (SZ == 1 ) 
        { 
            RET = q1.front (); 
            q1.pop (); 
        } 
        Иначе ,  если (SZ> 1 ) 
        { в 
            то время как (q1.size ()> 1 ) 
            { 
                q2.push (q1.front ()); 
                q1.pop (); 
            } 
            RET = q1.front (); 
            q1.pop (); 
        } 
        еще
        { В 
            то время как (q2.size ()> 1 ) 
            { 
                q1.push (q2.front ()); 
                q2.pop (); 
            } 
            RET = q2.front (); 
            q2.pop (); 
        } 
        Возврата RET; 
    } 

    / * * Получить верхний элемент. * / 
    INT сверху () {
         INT RET;
        если (q1.empty () && q2.empty ())   возвращение - 1 ;
        INT SZ = q1.size ();
        если (SZ == 1 ) 
        {
            RET = q1.front ();
            // q1.pop (); 
        }
         Иначе ,  если (SZ> 1 ) 
        { в 
            то время как (q1.size ()> 1 ) 
            { 
                q2.push (q1.front ()); 
                q1.pop (); 
            } 
            RET = q1.front ();
            // q1.pop (); 
        }
         Иначе 
        { в 
            то время как (q2.size ()> 1 ) 
            { 
                q1.push (q2.front ()); 
                q2.pop ();
            }
            RET = q2.front ();
             // q2.pop (); 
            q1.push (q2.front ());   // Q2 передавать полный покой, или заказ не будет 
            q2.pop (); 
        } 
        возвращение RET; 
    } 

    / * * Возвращает ли стек пуст. * / 
    BOOL пустой () {
         возвращение q1.empty () && q2.empty (); 
    } 
}; 

INT основной () 
{ 
    MyStack * OBJ = новый новый MyStack (); 
    OBJ -> Нажмите ( 1. ); 
    OBJ -> Нажать ( 2); 
    OBJ -> толчок ( 3 ); 
    соиЬ << obj-> верх () << епсИ; 
    соиЬ << obj-> поп () << епсИ; 
    соиЬ << obj-> верх () << епсИ; 
    соиЬ << obj-> поп () << епсИ; 
    соиЬ << obj-> верх () << епсИ; 
}

 

 

Ссылка Ссылки: https://blog.csdn.net/violet_echo_0908/article/details/50986516

рекомендация

отwww.cnblogs.com/lfri/p/12436929.html
рекомендация