2017-02-15 6 views
-2

スタックに最後に追加されたアイテムではなく、最初に追加されたアイテムをどのようにポップするのですか?私はこれを試みたが、ちょうどうまくいかない。ありがとうございますJavaのスタックに最初に追加したアイテムをどのようにポップできますか?

import java.util.ArrayList; 
import java.util.List; 
import java.util.Stack; 

public class Exercise0204 { 

    public static void main(String[] args) { 
     Stack<String> stack = new Stack<String>(); 
     stack.push("bottom"); 
     System.out.println(stack); 

     stack.push("second"); 
     System.out.println(stack); 

     stack.push("third"); 
     System.out.println(stack); 

     stack.push("fourth"); 

     System.out.println(stack); 

      List list = new ArrayList(stack); 

     for (int i = 0; i <stack.size(); i++) {  

      list.remove(i); 
     } 


    } 

} 

ありがとうございます。動作するようになっていません

+0

'stack.size()'を 'list.size() - 1'に変更します。それはエラーを取り除くでしょう。 –

+2

スタックは後入れ先出しです。先入れ先出しをしたい場合は、まずキューを作成します。両方の端から削除する場合は、デキューを使用します。 –

+0

あなたは 'stack'から何も削除していません。あなたは' list'から要素を削除しようとしています。あなたの目標はもっと明確に説明できますか? – shmosel

答えて

-1

スタックデータ構造は、最初の要素のポップの動作を定義していないです。前述したように、LIFOデータ構造である。内部実装の詳細は関連していません(リンクされたリストまたはフードの下にある他のもの)。

私はむしろ両端キューですjava.util.Dequeを使用すると思います。

Deque<String> deque = new LinkedList<>(); 

deque.push("S1"); 
deque.push("S2"); 
deque.push("S3"); 
deque.push("S4"); 
deque.push("S5"); 
deque.push("S6"); 
deque.push("S7"); 
deque.push("S8"); 

String last = deque.pollLast(); 
String first = deque.pollFirst(); 
+0

'Stack'は適切な' List'である 'Vector'を拡張します。これは内部実装の詳細ではありません。 – shmosel

-1

は、スタックが最初に出て行き、最後に来るものを意味LIFOの原則、に取り組んでいます。あなたが探しているかもしれないと、FIFOの原理で動作キュー

+0

Javaの 'Stack'は実際には' List'です。これは任意の挿入と削除の順序をサポートしています。 – shmosel

0

本当のスタックに悩まされている場合は、すべてをポップして直ちに別のスタックにプッシュしてください。これにより、すべてが逆順でスタックされます。新しいスタックの一番上の要素が元の下要素になります。 whileループにwhileループ -

public E bottomElement(Stack<E> stack) { 
    if (stack.isEmpty()) throw new IllegalArgumentException("empty stack"); 

    // Flip the stack over. 
    final Stack<E> upsideDownStack = new Stack<E>(); 
    do { 
     upsideDownStack.push(stack.pop()); 
    } while (!stack.isEmpty()); 

    final E result = upsideDownStack.peek(); 

    // Flip the stack back over. 
    do { 
     stack.push(upsideDownStack.pop()); 
    } while (!upsideDownStack.isEmpty()); 

    return result; 
} 

あなただけupsideDownStack.pop()upsideDownStack.peek()を変更し、最終的doを変更する、それだけを返すと、スタックにそれを維持するのではなく、スタックから底部要素を削除したい場合は

関連する問題