2009-05-01 5 views
1

要素の削除も可能なスタック構造が必要です。私は.Netフレームワークでこのようなものを見つけることができません。どの構造が私にこれを実装するための最良の基礎を提供していますか?C#削除可能要素を持つスタック

+1

など、項目がリストされていないことを確認しますJavaとC#/ VB.Netの両方が働いていて、Java Stackコレクション*にはremove(Object)メソッドがあります(Collectionインターフェイスではそうです)。 – Powerlord

答えて

6

私はAddFirst(Push)とRemoveFirst(Pop)のメソッドを持っているので、LinkedListを使用します。しかし、それはまた、真ん中で削除するために使用できる単純なRemoveメソッドを持っています。

+0

ありがとう、これは完璧です。 –

1
System.Collections.Generic.List<T> 

又は

System.Collections.Generic.LinkedList<T> 

状況に応じ。

1

まあ、どのようなリストのような構造体もスタックとして使用できます。あなたはちょうどプッシュし、最後から項目をポップします。

スタックの途中でアイテムを削除する必要がある場合は、組み込みのジェネリックListのRemoveAt()を使用できます。

3

LinkedList<T>?あなたはStack<T>としてそれを扱うためにあなた自身を包んでいなければならないでしょう。もちろん、あなただけList<T>を使用することができます - しかし、あなたは途中からの削除のコストを吸収する必要があると思います...のような

何か:あなたが必要とする他のどんな方法/同期/などと

using System; 
using System.Collections.Generic; 
class MyStack<T> { 
    private readonly LinkedList<T> list = new LinkedList<T>(); 
    public void Push(T value) { 
     list.AddLast(value); 
    } 
    public int Count { get { return list.Count; } } 
    public T Pop() { 
     LinkedListNode<T> node = list.Last; 
     if(node == null) throw new InvalidOperationException(); 
     list.RemoveLast(); 
     return node.Value; 
    } 
    public bool Remove(T item) { 
     return list.Remove(item); 
    } 
} 

+1

とdownvoteのため... –

0

要素を削除すると、スタックの一番上にないアイテムを削除することを意味しますか?

あなたができることの1つは、リストを使用して、拡張メソッドを使用してスタックのような動作を実装することです(メモ帳でコード化されています)。あなたは、その後も、リストが空の場合はnullを返すか、例外をスローするようにしたいかもしれない(特別な処理を行うことができ、多分あなたは、私が使用

public static void Push<T>(this IList<T> list, T item) 
{ 
    list.InsertAt(0, item); 
} 

public static T Pop<T>(this IList<T> list) 
{ 
    if(list.Count > 0) 
    { 
     T value = list[0]; 
     list.RemoveAt(0); 
     return value; 
    } 
    // handle error 
} 
+0

リストの* end *からadd-to/remove-betterを使う方がいいでしょう。そうしないと、あなたが何かをするたびにたくさんのコピーを... –

+0

あなたのリストをもっとコントロールする必要があるならば、私は@Marcの答えに行きます。単純なことをやって、私のような機能を使うようなスタックが必要です。何かを覚えておくことは、あなたのリストに対してlinqサポートが必要な場合は、IEnumerableを実装することです。 –

+0

私はアプローチに同意していません - 単にリストの方向性... "0"の終わりですべての仕事にはるかに高価です... –

関連する問題