標籤:

為什麼下面的代碼,鏈表的創建中,插入和刪除的操作中返回值是對象指針?


有條件的話換本書吧,這代碼幾乎每行都有問題。

  • class name 應該是 LinkedList;
  • constructor 應該是 explicit;
  • 沒有定義或禁用 copy constructor 和 operator=,作者很可能連 Effective C++ 都沒讀過。
  • IsEmpty() 應該是 const;
  • GetNode 應該返回 T,並且有 const 重載。更重要的是,為什麼鏈表要提供 O(N) 的下標操作?
  • Length() 應該是 const,而且這個實現很可能是 O(N) 的。
  • LocateNode() 和 Insert() 的參數應該是 const T;
  • Insert 和 Delete 都是 O(N) 的操作,那麼鏈表的特點/優勢如何體現?
  • ShowList() 應該是 const;
  • 眼花,劃掉


明顯不是對象指針啊,是你這個LinkList&的引用,具體返回什麼,還是看Insert和Delete的實現吧,我猜是返回*this,這個是為了方便代碼的鏈式調用


他返回LinkedList&就是為了返回this

返回this是面向對象編程的一個小技巧

比如你往一個list裡面放很多東西

可以:

list.add("中國");

list.add("北京市");

list.add("海淀區");

list.add("中關村小學");

list.add("三年2班");

也可以:

list.add("中國").add("北京市").add("海淀區").add("中關村小學").add("三年2班");

顯然後者更省事、更直觀。前者你的add函數返回void就可以了,後者就得返回this,所有的面向對象語言都可以這麼玩。

***********

前面也有人指出這幾行代碼有很多問題。

就C++語言來講,最可怕的是這個LinkList對象複製時會出問題,新的對象會使用原對象的head指針,當原對象釋放後,新對象的head就變得不可用了。

即使只看數據結構,這個list實現的也很糟糕。

依他這個結構,length()函數效率是極低的。insert和delete這麼重要的函數使用下標也是不知所謂。

我也建議換一本書來讀,數據結構這個東西都已經出現好幾十年了就那點東西也不多,不必讀這些入門讀物。


方便鏈式調用


1. 引用返回。

比如

ll.insert(1, "a").insert(2, "b").insert(3, "c").delete(1)

2. 代碼不用等寬字體的都是邪教


大佬們,我打錯了,是對象引用,,,函數的實現中返回的是*this,,為什麼返回值不能是void呢??


一個連引用都不知道是什麼的孩子。


學好C++再來看吧。

LinkedList&

這個類型根本不是指針類型啊。


推薦閱讀:

《數據結構與演算法分析C語言描述》真的適合初學者嗎?
文科生跨考類計算機專業,求分析?
O(1)刪除鏈表節點?
演算法書如何選擇?
超長字元串中如何快速查找一個子串?

TAG:數據結構 | CC |