Jianzhi Offer 09 2つのスタックを使用してキューの問題を解決する

題名

事前知識

キュー

QueueはJavaでキューを実装するインターフェースであり、合計6つのメソッドしかなく、通常はそのうち3つだけを使用します。Queueの実装クラスはLinkedListとPriorityQueueです。最も一般的に使用される実装クラスはLinkedListです。

ここに画像の説明を挿入

キューの6つのメソッド分類:

プッシュ要素(追加):add()、offer()は
同じです。容量を超えず、要素はキューの最後からプッシュされ、プッシュされた要素が返されます。
違い:容量を超えると、add()メソッドは例外をスローし、offer()はfalseを返します

ポップアップ要素(削除):remove()とpoll()は
同じです:容量が0より大きい場合、削除し、行の先頭にある削除した要素を返します。
違い:容量が0の場合、remove()は例外をスローし、poll()はfalseを返します

head要素を取得します(削除されません):element()とpeek()は
同じです:容量が0より大きい場合、どちらもhead要素を返します。ただし、削除されません。
違い:容量が0の場合、element()は例外をスローし、peek()はnullを返します。

基本的なコレクション操作に加えて、キューは(上記のように)固有の挿入、抽出、およびチェック操作も提供します。各メソッドには2つの形式があります。1つは例外をスローし(操作が失敗した場合)、もう1つは特別な値(操作に応じてnullまたはfalse)を返します。後者の形式の挿入操作は、容量が制限されたキューの実装用に特別に設計されています。ほとんどの実装では、挿入操作は失敗しません。

例外を投げる 特別な値を返す
インサート 追加(e) 申し出(e)
削除する 削除する() poll()
試験 素子() ピーク()

Dequeには3つの用途があります。

通常のキュー(一方の端がもう一方の端に入る):
Queue queue = new LinkedList()またはDeque deque = new LinkedList()
両端のキュー(両端が入り、出ることができる)
Deque deque = new LinkedList()
スタック
Deque deque = new LinkedList()
Dequeスタック操作メソッド:push()、pop()、peek()。

Dequeは、両端での要素の挿入と削除をサポートする線形コレクションです。dequeという名前は、「両端キュー」の省略形であり、通常「デッキ」と発音されます。ほとんどのDeque実装には、要素に含めることができる要素の数に固定の制限はありませんが、このインターフェイスは、容量制限のある両端キューと固定サイズの制限のない両端キューの両方をサポートしています。

このインターフェイスは、両端キューの両端にある要素にアクセスするためのメソッドを定義します。要素を挿入、削除、および検査するためのメソッドを提供します。各メソッドには2つの形式があります。1つは操作が失敗したときに例外をスローし、もう1つは特別な値(操作に応じてnullまたはfalse)を返します。後者の形式の挿入操作は、容量制限のあるDeque実装で使用するように設計されています。ほとんどの実装では、挿入操作が失敗することはありません。

要素を挿入

addFirst():要素を行の先頭に挿入します。要素が空の場合、NPEが発生します

addLast():要素をキューの最後に挿入します。空の場合は、NPEが発生します

offerFirst():行の先頭に要素を挿入します。挿入が成功した場合はtrueを返し、それ以外の場合はfalseを返します

offerLast():要素をキューの最後に挿入し、挿入が成功した場合はtrueを返し、それ以外の場合はfalseを返します

要素を削除

removeFirst():ヘッド要素を返し、削除します。要素がnullの場合、NoSuchElementExceptionが発生します

removeLast():キューの最後にある要素を返して削除します。要素がnullの場合、NoSuchElementExceptionが発生します

pollFirst():キューの先頭要素を返し、削除します。キューに要素がない場合は、nullを返します

pollLast():キューの最後の要素を返し、削除します。キューに要素がない場合は、nullを返します

要素を取得

getFirst():ヘッド要素を取得しますが、削除はしません。キューに要素がない場合、NoSuchElementExceptionが発生します

getLast():キューの最後の要素を取得しますが、削除しません。キューに要素がない場合、NoSuchElementExceptionが発生します

peekFirst():キューの先頭要素を取得しますが、削除しません。キューに要素がない場合は、nullを返します

peekLast():キューの最後の要素を取得しますが、削除しません。キューに要素がない場合は、nullを返します

スタック操作

pop():スタックの要素をポップします。つまり、先頭要素を返し、削除します。これは、removeFirst()と同等です。キューに要素がない場合、NoSuchElementExceptionが発生します。

push():要素をスタックにプッシュします。つまり、要素をキューの先頭に追加します。これはaddFirst()と同等です。要素がnullの場合はNPEが発生し、スタックスペースが制限されている場合はIllegalStateExceptionが発生します

Jianzhi Offer 09 2つのスタックを使用してキューの問題を解決する

import java.util.LinkedList;
import java.util.Queue;

public class CQueue {
    
    
    Queue<Integer> stack1 = null;
    Queue<Integer> stack2 = null;
    public CQueue() {
    
    
        stack1 = new LinkedList();
        stack2 = new LinkedList();
    }

    public void appendTail(int value) {
    
    
//        stack1作队列头
        stack1.add(value);
    }


    public int deleteHead() {
    
    
//        stack2作为队列尾
        int da = 0 ;
        if ( !stack2.isEmpty()){
    
    
            return stack2.remove();
        }else {
    
    
            if (stack1.isEmpty()){
    
    
                return -1;
                
            }else{
    
    
                while (stack1.size() != 0 ){
    
    
                    stack2.add(stack1.remove());
                    
                }
                return stack2.remove();
            }
        }

    }
}

転載:https :
//blog.csdn.net/devnn/article/details/82591349

https://blog.csdn.net/devnn/article/details/82716447

おすすめ

転載: blog.csdn.net/qq_43458555/article/details/108065590