0

こんにちは、私は C# を使用しており、MainWindow から関数 Pop(Node クラス) を呼び出そうとしています。pop メソッドは、ポップされた値を返し、スタックから削除する必要があります。関数は機能しており、トップ値は関数内から削除されていますが、MainWindow では、スタックは同じように見えます (LinkedList は変更されません)。これは私の Node クラスと Pop 関数です。

public class Node
    {
        #region Constructor and Declarations
        public int custId;        
        public Node next;
        //other fields

 public Node(int _data, Node _next)
        {
            this.custId = _data;
            if (_next != null)
                this.next = _next;
            else
                this.next = null;
        }
        public Node()
        {
        }
        #endregion

//Make Stack
public Node MakeList()
        {

            Node slist1 = new Node(1, null);
            Node slist2 = new Node(2, null);
            Node slist3 = new Node(3, null);
            Node slist4 = new Node(4, null);
            Node slist5 = new Node(5, null);

            slist1.next = slist2;
            slist2.next = slist3;
            slist3.next = slist4;
            slist4.next = slist5;

            return slist1;
        }

#region PopCustomer
 public int pop(Node stacktop)
        {
            Node temp;
            int removedCustId = 0;
            if (stacktop == null)
                return -1;

            else
            {
                temp = stacktop;
                removedCustId = temp.custId;
                stacktop = temp.next;
                temp = null;
            }
            return removedCustId;
        }
#endregion

mainWindow でスタックを作成し、Pop を呼び出します。しかし、スタックは同じように見えます - CustID が 1->2->3->4->5 であり、2->3->4->5 ではありません

//MAIN WINDOW 
        #region MainWindow 
                    Node stackTop = new Node();
                    stackTop=stackTop.MakeList();
                    int popedItem = stackTop.pop(stackTop);//STACK LOOKS SAME - with CustIDs 1->2->3->4->5
                    #endregion 

/

ありがとう、クリシュナ

4

1 に答える 1

0

あなたの主な問題は、この問題に対するあなたのアプローチにあると思います。C の方法でスタックをコーディングしようとしていて、C# オブジェクトを C ポインターとして扱っています。

pop() 関数では、行temp = null;は変数を値として設定するだけで、tempnull以外の値を保持します。変数を null として設定することは、オブジェクトを解放する正しい方法ではないことを知っておく必要があります。nullstackTop

C# では、既定でセーフ モードになり、ポインターは許可されません。Genericsについて読むことをお勧めします。これは C# でデータ構造を実装する一般的な方法であり、動的配列を使用した例が表示されます。

よろしく

于 2012-10-25T17:07:50.667 に答える