目次
例 2:
解決策の質問のアイデア
ステップ 3
概要
実装コード
注意事項
ホームページ Java &#&ベース 2 つのスタックを持つキューを実装するにはどうすればよいですか?

2 つのスタックを持つキューを実装するにはどうすればよいですか?

Oct 26, 2020 pm 05:54 PM
java スタック

# #Java ベースの教程 # 2 つのメソッドを使用して 1 つのリストを実行する方法。

2 つのスタックを持つキューを実装するにはどうすればよいですか?# #队列と栈はコンピューター内の 2 つの非常に重要なデータ構造であり、前の学习 (《队列》、《栈》) 我们知道了它们各自的特点、队列は先先出 (FIFO) のもの、そして栈は先先です後 (FILO) で、どのようにしてマークを使用してこの列を実現するのでしょうか?

サンプル(スタック)の通常のメソッドには以下が含まれます:

push(): メソッドに入る、元素を追加する;

pop(): メソッドを取り出し、要素を削除して要素を返します。
  • peek(): 要素を削除しません。
队列(キュー)の一般的なメソッドには以下が含まれます:

2 つのスタックを持つキューを実装するにはどうすればよいですか?

offer():入力メソッド、方向队尾追加元素;

poll(): メソッドを取り出し、要素を削除して要素を返します。
  • peek(): 要素を削除せず、要素を削除します。
  • #これらの事前の知識はありますが、次に今日のトピックを見てみましょう。関数 appendTail と deleteHead はそれぞれ、列の尾部で整数を入力し、列の先頭で整数を削除する機能を実行します。列に要素がない場合、deleteHead 操作は -1 を返します。 ##输入:
  • ["CQueue","appendTail","deleteHead","deleteHead"]
  • [[],[3],[],[]]

出力:[null,null,3,-1]2 つのスタックを持つキューを実装するにはどうすればよいですか?

例 2:

入力:

["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]

[[],[],[5],[2],[ ],[]]

出力: [null,-1,null,null,5,2]

プロンプト:

1

appendTail および deleteHead への呼び出しが最大 10000 回行われます

leetcode: leetcode-cn.com/problems/yo…

解決策の質問のアイデア

この質問の意味は実際には理解しやすく、先入れ後出しスタックを先入れ先出しキューに変更するというものです。質問には、「キューを実装するには 2 つのスタックを使用する」というヒントも示されています。 この質問の核心的な考え方は、「マイナスがプラスになる」です。最初にスタックを使用して要素を格納し (最初に入力する要素はスタックの一番下にあります)、次に要素を追加します最初のスタック内 新しいスタックに移動します。このとき、最初に入力された要素はスタックの先頭にあります。その後、2 番目のスタックを使用して要素が取り出されるとき、全体の実行順序は先入れ先出しになります。 。

次に、プロセス全体をグラフィカルに実装しましょう。

ステップ 1

次の図に示すように、最初に要素を最初のスタックにプッシュします。 2 つのスタックを持つキューを実装するにはどうすればよいですか?

ステップ 2

要素をプッシュします。最初のスタックに次の図に示すように、1 つのスタック内の要素が 2 番目のスタックに移動されます。 2 つのスタックを持つキューを実装するにはどうすればよいですか?

ステップ 3

すべての要素が 2 番目のスタックからポップされます。次の図に示す 表示: 2 つのスタックを持つキューを実装するにはどうすればよいですか?

概要

上の図からわかるように、要素を追加する順序は 1、2、3 であり、最後にポップする順序になります。 2 つのスタックを通過した後のスタックの out も 1, 2 , 3 であるため、2 つのスタックを介してキュー (先入れ先出し) を実装します。 2 つのスタックを持つキューを実装するにはどうすればよいですか?

実装コード

次に、コードを使用して上記のアイデアを実装します。

class CQueue {
    Stack<integer> inputStack; // 入栈的容器(添加时操作)
    Stack<integer> outputStack; // 出栈和查询的栈容器

    public CQueue() {
        inputStack = new Stack();
        outputStack = new Stack();
    }    // 添加操作
    public void appendTail(int value) {
        inputStack.push(value);
    }    // 删除操作
    public int deleteHead() {        if (!outputStack.isEmpty()) {            // 出栈容器不为空
            return outputStack.pop();
        } else if (!inputStack.isEmpty()) {            // 入栈 stack 全部转移到出栈 stack
            while (!inputStack.isEmpty()) {
                outputStack.push(inputStack.pop());
            }
        }        return outputStack.isEmpty() ? -1 : outputStack.pop();
    }
}复制代码</integer></integer>
ログイン後にコピー

上記のテスト コードを LeetCode に送信します。実行結果は次のとおりです。次のとおりです:2 つのスタックを持つキューを実装するにはどうすればよいですか?

注意事項

実装プロセス全体で特別な注意が必要な 2 つの詳細があります:

  1. 最初のスタックはプッシュのみを担当します。スタックに追加する (データを一時的に保存する) 場合、2 番目のスタックはポップ (最後のキュー実行シーケンス) のみを担当します;
  2. スタック 2 がポップされるたびに、スタック 1 から追加する前にすべての要素をポップアウトする必要があります (新しいデータを追加します。スタック 2 のすべてのデータがスタックからプッシュされていない場合、スタック 1 の要素をスタック 2 にプッシュできません。これにより、要素の実行順序が混乱します。

概要

この記事では、2 つの先入れ後出しスタックを使用し、次の考え方を通じてキューの先入れ先出し機能を実装します。 「ネガティブはポジティブになる」ですが、特別な注意が必要です。ポップアップ コンテナーである 2 番目のスタックが空 (スタック) でない場合、最初のスタックの要素を 2 番目のスタックに追加することはできません。プログラムの実行順序を混乱させる。

関連する無料学習の推奨事項: Java 基本チュートリアル

以上が2 つのスタックを持つキューを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

See all articles