您好我正在使用C#并尝试从MainWindow调用函数Pop(Node类)。 pop方法应该返回poped值并将其从堆栈中删除。该函数正在工作,顶部值从函数中删除,但在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。 但是堆栈看起来相同 - 使用CustIDs 1-> 2-> 3-> 4-> 5 NOT 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
/
谢谢, 克里希纳
答案 0 :(得分:0)
我认为你的主要问题在于解决这个问题的方法。您正在尝试以C方式编写堆栈并将C#对象视为C指针。
在pop()函数中, temp = null;
行只会将变量 temp
设置为 null
< / strong>值, stackTop
仍将具有非空值。您应该知道将变量设置为null不是释放对象的正确方法。
在C#中,默认情况下您处于安全模式,不允许使用指针。我鼓励您阅读Generics,这是在C#中实现数据结构的常用方法,您将看到使用动态数组的示例。
此致