[英]Stack implementation that a class contains an object of the same class
我已经阅读了C#中的Stack实现代码。
该代码可以正常工作,但是我不明白在同一个类中包含一个类的对象是否非法(我确信它可以编译,因此是合法的)。 代码如下。
public class Stack{
Entry top;
public void Push(object data){
top = new Entry(top, data);
}
public object Pop(){
if(top==null) throw new InvalidOperationException();
object result = top.data;
top = top.next;
return result;
}
class Entry{
public Entry next;//?
public object data;
public Entry(Entry next, object data){
this.next = next;
this.data = data;
}
}
}
代码已编译并可以正常运行。
我感到困惑的是,在Entry类内部,Entry类next
有一个字段。
此外,当Stack调用Push方法时,它会调用Entry构造函数,该构造函数将this.next
设置为next
,但是我不知道它是如何工作的, this.next
将指向对象next
,但是对象在哪里以及如何“ next” ”。
如果有人可以帮助我理解上面的代码,我将非常感激。
next
该字段存储对Entry
另一个对象的引用或空引用 。 请注意, next
可以为null !
您的困惑可能来自误解,即创建一个Entry
,您必须首先需要一个Entry
实例,乍一看似乎很循环。 但是,请注意,您可以将null
作为第一个参数传递:
Entry entry1 = new Entry(null, someObject);
本质上, Entry
表示链表中的一个节点,该链表又用于实现堆栈:
A ---> B ---> C
A
的next
A
是B
B
next
是C
C
的next
是什么? 它是null
!
这样的工作流程
top = new Entry(top, data);
(A), top.next
<---空 top = new Entry(top, data);
(B), top.next
<---(A) top = new Entry(top, data);
(C), top.next
<---(B) Pop(),因为现在top == null
,所以抛出InvalidOperationException
。
还有第一个问题(在哪里以及如何创建对象“ next”)
首先是SPECIALY,接下来是null,但是还可以,因为当pop()时,它具有null检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.