为了账号安全,请及时绑定邮箱和手机立即绑定

一个类包含同一个类的对象的堆栈实现

一个类包含同一个类的对象的堆栈实现

C#
ABOUTYOU 2023-08-27 10:49:18
我读过一段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 类内部,它有一个nextEntry 类字段。此外,当 Stack 调用 Push 方法时,它会调用 Entry 构造函数,该构造函数设置为this.next,next但我不明白这是如何工作的,this.next它将指向 object next,但“下一个”对象在哪里以及如何创建。如果有人能帮助我理解上面的代码,我将非常感激。
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

该字段next存储对另一个对象的引用Entry或空引用。请注意,next 可能为空

您的困惑可能来自于这样的误解:要创建一个Entry,您必须需要一个Entryfirst 的实例,乍一看这似乎很循环。但是,请注意,您可以null作为第一个参数传递:

Entry entry1 = new Entry(null, someObject);

本质上,Entry表示链表中的一个节点,而该节点又用于实现堆栈:

A ---> B ---> C

next是。A_ 的是。是什么的?是!BnextBCnextCnull


查看完整回答
反对 回复 2023-08-27
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

工作流程就这样

  1. Push() , top = new Entry(top, data); (A) , top.next<--- null

  2. 推(),top = new Entry(top, data); (B),top.next<---(A)

  3. 推(),top = new Entry(top, data); (C),top.next<---(B)

  4. Pop() , 返回 (C) , 顶部 = (B);

  5. Pop() , 返回 (B) , 顶部 = (A);

  6. Pop() , 返回 (A) , 顶部 = null ;

  7. Pop() ,InvalidOperationException因为top == null现在就抛出。

    你的第一个问题(“下一个”对象在哪里以及如何创建)

第一次推送是特别的,接下来是 null ,但是没关系,因为当 pop() 时,它有 null 检查。


查看完整回答
反对 回复 2023-08-27
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信