亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個類包含同一個類的對象的堆棧實現

一個類包含同一個類的對象的堆棧實現

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 關注
  • 161 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號