學數據結構用C還是C++?


C++ 有模板,是描述數據結構的利器:

  • hash_set& 的內部結構可以描述為 vector&&> 或者 vector&&>

  • map&&>,記錄一個單詞在文件中出現的位置,一句話就說清楚了。

用 C 語言就麻煩得多,要麼寫很多重複的代碼(例如 stack& 和 stack&),要麼用void*來搞,失去類型安全和 locality 的好處。


簡單和中級的數據結構,用C寫,很有好處。比如表,二叉樹,堆,並查集之類的。

再複雜一點的就建議用C艹,比如圖的非遞歸遍歷會用到隊列,但你這時關注點應該在圖上,而不應該是隊列或者其他細枝末節,這些細枝末節直接拿標準庫搞定就可以了。

再用Java或C井把學過的東西重寫一下,體驗一下純面向對象,體驗一下純引用世界。或者以泛型模板的方式把這些數據結構用C艹和C井寫成輪子。

這樣就差不多了。


學數據結構用C語言,解決實際問題抽象數據結構的時候用C++,C++11寫的很帶感


學習數據結構的話,可以用偽代碼描述的,非要用C的話C/C++都用,大部分結構C完成就完全足夠了,細枝末節C++可以幫到你,比如你想讓函數可以改變實參值,使用c佳佳中的引用型參數會方便很多。

但是說實話,沒必要這麼嚴謹,這是數據結構,結構啊,編程是次要的,相信我,你真正用到數據結構的時候可能和c系列沒個P關係。


樓主既然只是想學習而已,那麼就坑定沒有涉及到封裝泛型什麼的,偷懶點連內存管理都可以扔掉了,只管new,不用delete了。所以既然這樣那麼肯定是用C++比較好。

例如說用C創建一個節點。

struct node{};
node* nod = malloc( sizeof(node) );

那麼用C++創建一個節點。

struct node{};
auto nod = new node;

哪種方法簡便和易讀想必不用我多說吧。

還有輸出結果的時候,用

print("%d",nod-&>data);

好還是直接用

cout&<&data&<&

好呢?

最終要的是,你看C++的代碼不爽,完全可以用C++裡面PureC的子集嘛~


學慣用 C,簡單,基礎。

工作用C++, 開發快,錯了也不會扣分(扣不扣工資我就不知道了)。


先用裸C(不作任何封裝的C)實現演算法和單元測試,再用C++作OO或template封裝,推薦:

C++代碼重構——從C global到C++ template


自己現在就在學數據結構,老師用的c++,我用的c。

才疏學淺,若有錯誤,請指正

我只想說,c++完全就是數據結構利器好么!?

(坷垃好處都有啥?誰能說對就給誰o(* ̄▽ ̄*)ブ)

1.定義類,可以把數據結構本身操作和其他函數明顯分開

2.還有就是定義模板!簡直不要太方便。雖說c也可以寫adt,每次程序頭上光定義都得十幾行→_→

3.c++中可以直接對定義的類進行操作!當時我就_(:_」∠)_

舉個例子,c的數據結構大多加頭,不加頭很蛋疼…c中如果棧不加頭,而是直接是指向棧定的話。天_(:_」∠)_,如果出棧你還需要傳入一個指向棧頂的指針,不然pop了等於沒做…(傳入的地址是複製過來的地址,不用二重指針沒法修改)

而c++可以直接改哦

4.還有c++里動態分配空間

new

就這麼簡單!c裡邊可是好多個…(雖然我都一律malloc:D)

5.然而c++是方便了些,但是喪失了一點c自由


一切跟你扯「面向對象」的都是耍流氓,扯模板的還稍微正常那麼一點


用什麼C 用JAVA


吃飯是使用筷子還是使用刀叉?

哪個順手用哪個,演算法思想才是重要的,不要捨本逐末。


偶覺得用PASCAL就不錯,C也可以

數據結構不是編程,編程語言在數據結構這門課的作用是描述

懂了,用什麼語言都沒問題

不應該讓"選擇什麼編程語言"來困擾你學習數據結構

你的老師用什麼語言,你就用什麼語言

你的教材用什麼語言,你就用什麼語言

因為重要的是你要理解掌握數據結構和演算法

而不是用什麼語言來實現他

用什麼語言來實現,是另一個問題,但不是數據結構應該解決的問題


你直接用Cpp的C子集不就行了么

用不用STL或者模板還不是在你於自己怎麼選么


一直覺得殷人昆的C++版數據結構是一本很經典的書,雖然對初學者來說有一點難度


用C學數據結構,然後用的時候C++


用什麼語言都沒有關係,數據結構本身是抽象的,與具體實現關係不大.可以選擇自己熟悉的語言描述的數據結構書來做切入點


用什麼重要麼?重要的不是思想么?

學原理用C我個人覺得好一些...缺少了很多庫支持以後,啥都要自己寫,酸爽一次以後,原理就通了...

但是如果想寫點東西能夠拿著用的話,畢竟C++有模版...


毫不留情的說,用c。為什麼呢?c貼近生活啊,你要一步一步敲代碼啊,非理解透徹你敲不對,用不對啊!只有經歷過各種失敗與挫折,你才能真正理解啊。另外,對於一個排序演算法,建個堆啥的,你用c++幹嘛?封裝?多態?哦,不要自己騙自己了。模版類真的好用么?好個蛋,一個void解決一切有沒有!需要各種template?寫到手抽筋好不好!說c沒有c++好用,那是因為c功底差,我不信上來都會用stl。當然,又懶,又牛的可以考慮看看,畢竟封裝了很多現成的東西。另外,其實很多人打著c++的旗號,干著c的事情,不倫不類,讓人哭笑不得!當然也包括我自己。。樓主有這個問題,代表沒認清楚c與c++,建議去看一看各自的特性。。竊以為,c是最適合用來學習的語言,因為,它最符合正常人的思維習慣,並且可以讓你控制所有細節。但是,如果想要快速開發啥的,就不要考慮它了,畢竟你要處理太多東西。c++,嗯,除了封裝,多態以及那個stl,你用它幹啥!!


推薦閱讀:

如何提升 C++ Trie 樹的存取效率?
學習C++語言重點應該當在哪裡?
C++中循環中的auto是利用了迭代器的機制嗎?
codeblocks寫代碼有時候會自動補全,有時候不補全?

TAG:C編程語言 | 計算機科學 | C | 數據結構 |