A. 數據結構與演算法分析
數據結構與演算法分析(C++版第2版)/國外計算機科學教材系列
作者:著者:美Shaffer,C.A;譯者:張銘等譯 出版社:電子工業出版社
B. 初學者應該從哪些方面學好《數據結構和演算法》(這簡直就像看天書一樣)
《數據結構和演算法》這樣的書適合至少會用一門面向過程的語言編程的讀者,比如C語言。講解數據結構的書一般是用面向過程的語言或偽代碼來描述,所以有C語言基礎的讀者還是比較容易理解書中代碼含意的。如果你對面向過程的語言不甚了解,建議先看看其中一種,其他的可以觸類旁通。
之後就是研究代碼和自己動手實現了。實踐出真知!
另外,剛開始學習的時候肯定是有難度的,想學好,一定要堅持。
C. 程序=演算法+數據結構,說說你的理解,演算法近似於程序的概念,數據結構是邏輯結構和存儲結構,誰能通俗地
我認為,程序就是具有特定意義的指令集合。
①程序注重於從「功能」上進行描述,也就是它能幹什麼。
比如一個鬧鍾程序,到某個時間就會閃動、響鈴。
其意義在於提醒人們時間。
②演算法注重於「問題」的解決過程,也就是怎麼解決問題。
假如人們有這么一種需求,他們希望能在特定的時間被提醒。
如何解決這個需求、或者說問題,這就是演算法的事。
③數據結構注重於數據的存儲和數據的意義。
數據結構主要是服務於演算法,這是因為演算法需要用到數據。
良好的輸入數據,有利於演算法處理,能提高演算法效率。
就比如時間,人們看時間都是時分秒的形式hh:mm:ss。
但是兩個時間計算起來挺麻煩,比如23:14:29-13:38:53等於多少?
同時存儲起來也不方便,是用字元串存儲還是3個數字類型?
如果時間是以秒來表示的23:14:29=83669(s),13:38:53=49133(s)
不但計算起來方便,存儲起來也很方便。
D. 怎樣學好數據結構與演算法
1、 有良好的學習興趣
(1)課前預習,對所學知識產生疑問,產生好奇心。
(2)聽課中要配合老師講課,滿足感官的興奮性。聽課中重點解決預習中疑問,把老師課堂的提問、停頓、教具和模型的演示都視為欣賞音樂,及時回答老師課堂提問,培養思考與老師同步性,提高精神,把老師對你的提問的評價,變為鞭策學習的動力。
(3)思考問題注意歸納,挖掘你學習的潛力。
(4)聽課中注意老師講解時的數學思想,多問為什麼要這樣思考,這樣的方法怎樣是產生的。
(5)把概念回歸自然。所有學科都是從實際問題中產生歸納的,數學概念也回歸於現實生活,如角的概念、至交坐標系的產生、極坐標系的產生都是從實際生活中抽象出來的。只有回歸現實才能使對概念的理解切實可靠,在應用概念判斷、推理時會准確。
2、 建立良好的學習數學習慣。
習慣是經過重復練習而鞏固下來的穩重持久的條件反射和自然需要。建立良好的學習數學習慣,會使自己學習感到有序而輕松。高中數學的良好習慣應是:多質疑、勤思考、好動手、重歸納、注意應用。學生在學習數學的過程中,要把教師所傳授的知識翻譯成為自己的特殊語言,並永久記憶在自己的腦海中。另外還要保證每天有一定的自學時間,以便加寬知識面和培養自己再學習能力。
3、 有意識培養自己的各方面能力
數學能力包括:邏輯推理能力、抽象思維能力、計算能力、空間想像能力和分析解決問題能力共五大能力。這些能力是在不同的數學學習環境中得到培養的。在平時學習中要注意開發不同的學習場所,參與一切有益的學習實踐活動,如數學第二課堂、數學競賽、智力競賽等活動。平時注意觀察,比如,空間想像能力是通過實例凈化思維,把空間中的實體高度抽象在大腦中,並在大腦中進行分析推理。其它能力的培養都必須學習、理解、訓練、應用中得到發展。特別是,教師為了培養這些能力,會精心設計「智力課」和「智力問題」比如對習題的解答時的一題多解、舉一反三的訓練歸類,應用模型、電腦等多媒體教學等,都是為數學能力的培養開設的好課型,在這些課型中,學生務必要用全身心投入、全方位智力參與,最終達到自己各方面能力的全面發展。
其它注意事項
1、注意化歸轉化思想學習。
人們學習過程就是用掌握的知識去理解、解決未知知識。數學學習過程都是用舊知識引出和解決新問題,當新的知識掌握後再利用它去解決更新知識。初中知識是基礎,如果能把新知識用舊知識解答,你就有了化歸轉化思想了。可見,學習就是不斷地化歸轉化,不斷地繼承和發展更新舊知識。
2、學會數學教材的數學思想方法。
數學教材是採用蘊含披露的方式將數學思想溶於數學知識體系中,因此,適時對數學思想作出歸納、概括是十分必要的。概括數學思想一般可分為兩步進行:一是揭示數學思想內容規律,即將數學對象其具有的屬性或關系抽取出來,二是明確數學思想方法知識的聯系,抽取解決全體的框架。實施這兩步的措施可在課堂的聽講和課外的自學中進行。
學數學的幾個建議
1、記數學筆記,特別是對概念理解的不同側面和數學規律,教師為備戰高考而加的課外知識。
2、建立數學糾錯本。把平時容易出現錯誤的知識或推理記載下來,以防再犯。爭取做到:找錯、析錯、改錯、防錯。達到:能從反面入手深入理解正確東西;能由果朔因把錯誤原因弄個水落石出、以便對症下葯;解答問題完整、推理嚴密。
3、記憶數學規律和數學小結論。
4、與同學建立好關系,爭做「小老師」,形成數學學習「互助組」。
5、爭做數學課外題,加大自學力度。
6、反復鞏固,消滅前學後忘。
7、學會總結歸類。可:①從數學思想分類②從解題方法歸類③從知識應用上分類
學習上占第一,每個同學都可以做到。之所以你占不了第一,主要有兩個原因:第一、生活方式、學習方法不正確,第二、沒有堅強的毅力。在這裡面毅力是第一重要的,學習方法是第二重要的。
E. 數據結構與演算法,有圖有答案,剛入門,題目沒看懂,希望可以有詳細過程解答
答案應該是A,要釋放中間鏈應該先把上一個的指針指向後一個,後一個的指針指向上一個,然後再來釋放中間這個,千萬不能動T指針
F. 嚴蔚敏《數據結構》這張圖的兩個演算法怎麼理解2.14和2.15,靜態鏈表的,看不懂...
從void InitSpace.SL(SLinkList &space)函數可以看出
space[0].cur=1;
space[1].cur=2;
...
space[MAXSIZE-2].cur=MAXSIZE-1;
space[MAXSIZE-1].cur=0;
演算法2.14, int Malloc.SL(SLinkList &space)函數可以看出
第一次調用Malloc, return 1, 並且閑至空間少了一個,因為space[0].cur=2;
i=space[0].cur; --> i=1; space[0].cur=2; 就拿到了第1個結點
第二次調用Malloc, return 2, 並且閑至空間少了一個,因為space[0].cur=3;
i=space[0].cur; --> i=2; space[0].cur=3; 就拿到了第2個結點
...
第(MAXSIZE-1)次調用Malloc, returnMAXSIZE-1,空間用完,因為space[0].cur=0;
i=space[MAXSIZE-1].cur; --> i=MAXSIZE-1; space[0].cur=space[MAXSIZE-1].cur=0; 就拿到了第MAX-1個結點
演算法2.15, int Free.SL(SLinkList &space, int k)函數可以看出space[0].cur是表示當前第N個結點可用,space[k].cur=space[0].cur=N; space[0].cur=k;表示當前第k個結點可用,下一個可用結點是第N個;
所以在這此時調用Malloc就會拿到第k個結點,因為保存了下一個可用結點是在第N個,再下次調用Malloc就會去拿到第N個結點了