C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でキューを使用してスタックを実装する


キューを使用して1つのスタックを実装するとします。スタックに対してこれらのメソッドを定義する必要があります。

  • push(x)-xをスタックにプッシュします。

  • pop()-スタックから最上位の要素を削除して返す

  • top()-スタックから一番上の要素を返します。

  • empty()-スタックが空かどうかを返します。

したがって、関数push(10)、push(20)を呼び出してから、pop()、pop()を呼び出すと、出力は20、10になります

これを解決するには、次の手順に従います-

  • 1つの両端キューを定義する

  • 関数push()を定義します。これにはxが必要です

  • qの先頭にxを挿入します

  • 関数pop()

    を定義します
  • k:=qの最初の要素

  • qからフロント要素を削除

  • kを返す

  • 関数top()を定義する

  • qの最初の要素を返す

  • 関数empty()

    を定義します
  • qが空の場合、-

    • trueを返す

  • それ以外の場合

    • falseを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class MyStack {
private:
   deque<int> q;
public:
   void push(int x){
      q.push_front(x);
   }
   int pop(){
      int k = q.front();
      q.pop_front();
      return k;
   }
   int top(){
      return q.front();
   }
   bool empty(){
      if (q.empty())
         return true;
      else
         return false;
   }
};
main(){
   MyStack ob;
   ob.push(10);
   ob.push(20);
   cout << (ob.pop()) << endl;
   cout << (ob.pop()) << endl;
}

入力

push(10),push(20),pop(),pop()

出力

20
10

  1. C ++でRand7()を使用してRand10()を実装する

    1〜7の範囲の均一なランダム整数を生成する関数rand7があるとします。1〜10の範囲の均一なランダム整数を生成する別の関数rand10を作成する必要があります。一部のライブラリ関数を使用して乱数を生成することはできません。 2つの乱数が必要であるとすると、[8,10]になる可能性があります。 これを解決するには、次の手順に従います- rand40:=40 =40 rand40:=(rand7()-1)* 7 +(rand7()– 1) rand40 mod 10+1を返す 理解を深めるために、次の実装を見てみましょう- 例 #include <bits/st

  2. C ++ STL(3.5)でスタック

    C ++ STLでは、スタックはLIFO構造として実装されるコンテナーとして使用されます。 LIFOは後入れ先出しを意味します。 Stackは、本が上下に並べられた本の山と見なすことができ、最後に挿入された本が最初に削除されるため、LIFO構造と呼ばれます。 スタックに関連付けられている操作は- Top() -この関数は、スタックの最上位要素への参照を返します。 構文 --name_of_stack.top() パラメータ -パラメータなし 戻り値 -スタックコンテナの最上位要素への参照 Push() -この関数は、要素をスタックコンテナに挿入するために使用されま