[Java] 232. Verwenden Sie den Stack, um die Warteschlange zu implementieren - lernen Sie schnell die Verwendung der Stack-Klasse (Stack)! ! !

Verwenden Sie nur zwei Stapel, um eine First-In-First-Out-Warteschlange zu implementieren. Die Warteschlange sollte alle von der allgemeinen Warteschlange unterstützten Vorgänge unterstützen (Push, Pop, Peek, Leer):

Implementieren Sie die MyQueue-Klasse:

void push (int x) Schieben Sie das Element x an das Ende der Warteschlange.
int pop () Entfernen Sie es vom Anfang der Warteschlange und geben Sie das Element zurück.
int peek () Geben Sie das Element am Anfang der Warteschlange zurück.
boolean empty () Wenn die Warteschlange ist leer, return true, andernfalls false

Beschreibung:

Sie können nur Standardstapeloperationen verwenden, dh nur nach oben drücken, von oben spähen / öffnen, Größe und leere Operationen sind zulässig.
Die von Ihnen verwendete Sprache unterstützt möglicherweise keine Stapel. Sie können list oder deque (Warteschlange mit zwei Enden) verwenden, um einen Stapel zu simulieren, sofern es sich um eine Standardstapeloperation handelt.

Fortgeschrittene:

Können Sie für jede Operation eine Warteschlange mit einer amortisierten O (1) -Zeit implementieren? Mit anderen Worten, die Gesamtzeitkomplexität der Ausführung von n Operationen beträgt O (n), selbst wenn eine der Operationen lange dauern kann.

Beispiel:

Eingabe:
["MyQueue", "Push", "Push", "Peek", "Pop", "Leer"]
[[], [1], [2], [], [], []]
Ausgabe:
[null, null, null, 1, 1, false]

解释 :
MyQueue myQueue = new MyQueue ();
myQueue.push (1); // Warteschlange ist: [1]
myQueue.push (2); // Warteschlange ist: [1, 2] (ganz links vor der Warteschlange)
myQueue.peek (); // return 1
myQueue.pop (); // 1 zurückgeben, Warteschlange ist [2]
myQueue.empty (); // falsch zurückgeben

prompt:

1 <= x <= 9
Rufen Sie Push, Pop, Peek und Leer bis zu 100 Mal auf,
vorausgesetzt, alle Vorgänge sind gültig (eine leere Warteschlange ruft beispielsweise keine Pop- oder Peek-Vorgänge auf).

代码:
private Stack<Integer> queue1;
	private Stack<Integer> queue2;
    public MyQueue() {
    
    
         queue1=new Stack<>();
         queue2=new Stack<>();
    }
    public void push(int x) {
    
    
          queue1.push(x);
    }
    
    public int pop() {
    
    
    	stackTranqueue();
    	int x=queue2.pop();
    	while(!queue2.empty()) {
    
    
   		 queue1.push( queue2.pop());
   	    }
		return x;

    }
    public int peek() {
    
    
    	stackTranqueue();
    	int x=queue2.pop();
    	queue1.push(x);
    	while(!queue2.empty()) {
    
    
   		 queue1.push( queue2.pop());
   	    }
		return x;

    }
    public boolean empty() {
    
    
		return queue1.empty();

    }
    //栈queue1转化成queue2
    public void stackTranqueue() {
    
     
    	 while(!queue1.empty()) {
    
    
    		 queue2.push( queue1.pop());
    	 }
    }

Ich denke du magst

Origin blog.csdn.net/qq_44461217/article/details/114383187
Empfohlen
Rangfolge