第一篇:數據結構與算法課程設計 心得體會 學習體會
課程設計的心得體會
班級:計算機科學與技術08計科2班學號:0804012031姓名:楊松
對于本課程設計《算術表達式求值問題》,在起初分析題目時,只有一個大概的輪廓,包括算術表達式的運算規則,算術表達式所用到的數據結構,即棧,知道并會使用棧的基本運算,了解算術表達式求值的基本算法思想,操作數棧和算符棧的結合使用。
于是開始著手編寫程序,將上述已經明白的知識點通過程序展現出來,包括兩種棧的定義,涉及到的棧的功能函數的設計,以及基本的算術表達式的簡單計算,才發現,雖然上述基本工作已經完成,但對于具體處理算術表達式時,出現了很多的語法問題,邏輯問題,包括:怎樣區分算術表達式中的算符和操作數的問題,怎樣進行優先級的判斷和比較問題,怎樣處理非法算符的問題;怎樣處理非法操作數的問題,怎樣處理括號匹配的問題,怎樣處理操作數為多位數的問題,怎樣處理當操作數從正整數范圍擴充到實數范圍時的問題,怎樣處理具體調用功能函數時出現的問題,怎樣編輯菜單方便用戶的問題,等等;這些問題困擾了我一部分時間,之后,經反復思考,反復查閱資料,反復瀏覽網絡,同時與同學交流討論,請教老師,上述問題均得到了解決。
在解決算法設計過程中出現的難題之后,程序初步完成,但并不是到此為止,如何改進算法,如何提高算法的時間復雜度、空間復雜度,如何處理一些意想不到的錯誤和特有情況,也花了一部份時間。
在進行課程設計過程中,我發現,獨立思考起到了很關鍵的作用,在遇到問題時,首先想到的并不是去請教老師,而是回憶所學的知識點、查閱書本和參考資料,網絡也起到了一定的輔助作用;在必要時,與同學交流、討論,交換思想和方法,同時鞏固了知識點;與此同時,請教老師,指導程序的設計思想和方法。另外,本人的上機操作能力和動手能力明顯提高,思考問題、分析問題的方式得到了改進,解決問題的能力得到了提升,同時在與同學的交流和積極討論的過程中,不僅鞏固了所學的知識點,而且設計算法和程序的方法也有一定程度的提高。
談談不足之處,本次課程設計中,在遇到問題和錯誤時,有時顯得很浮躁,無從下手時,更急于解決問題,瀏覽網絡資源,卻忘記怎樣結合所學知識點來進行思考問題、分析錯誤。所以獨立思考的能力和分析問題、解決問題的能力還有待于提高,知識點的鞏固還需要進一步加強。
第二篇:數據結構與算法課程設計 心得體會 學習體會
課程設計的心得體會
剛一開始抽到題目,我一看覺得無從下手,由于那個時候很多課都還在進行著,也就是抽空思考一下思路,也到圖書館中借了相關的書來參考,但沒有進行很深入的研究。課程設計開始的時候,我開始思考我該如何去求解,確定了算法之后,就開始寫程序,修改錯誤,調試,直至完成,在這一過程中,讓我學會了很多東西。
在課程設計結束后,我對書本,也就是我們的教材的認識有了很大的提高。以前我覺得能看懂書上的知識,能寫出算法就認為自己學的還可以??墒峭ㄟ^課程設計,通過我對書上知識的研究,我發現其實書上有很多東西是我沒有領略到的。我的算法的核心思想就是圖的深度優先搜索遍歷,在用鄰接表對圖完成存儲之后,我就開始仔細的看書上有關圖的遍歷的知識,包括深度優先搜索遍歷和廣度優先搜索遍歷,就那么幾頁紙,我看了不知道多少遍。剛一開始看一下,覺得自己會了,然后做程序,遇到問題再拿書看,沒看一次我對算法的理解就更進了一步。通過這次課程設計,讓我明白了書上的知識看似是很有限的,但它蘊含的東西值得我們去花更多的時間去研究。學知識不能只學表面的知識,做出一個深度優先搜索遍歷程序不等于你就掌握了深度優先搜索遍歷算法,其他知識也是這樣,其他科目的學習也同樣是這樣。學習要抓住知識的精髓。
在課程設計這兩個星期中,讓我明白了獨立思考的重要性。一個東西只有經過自己的思考,自己明白了才是真的明白了,別人說的再明白不等于我明白。在思考的過程中,我發現對一個問題,你思考的月深入,可以挖掘的東西就越多。我做的題目是分酒問題:三個酒杯,一個能裝8kg,一個能裝5kg,一個能裝3kg,8kg是空的,5kg和3kg是滿的,不借助其他工具,最終分出兩個4kg。看似無從下手,但經過思考之后我確立了用圖來求解,但是怎樣抽象成圖,抽象成什么樣的圖,模型確立后,圖有很多種存儲結構,采用哪一種存儲結構是最優的等等問題都要去思考。最終我確定采用鄰接表作為存儲結構,圖的深度優先搜索遍歷來求解。
獨立思考很重要,跟別人交流也很重要。在我和別人交流的時候,開闊了我的思維空間,很多原先我沒想到的東西一下子就蹦出來了,而且能填補我知識的空白。跟老師交流就更重要了,以老師的知識層面和對問題的見解,他的想法具有很強的針對性和可行性。做好程序后,在寫實驗報告的時候,我發現在寫實驗報告的過程中,我對我的算法有了更進一步的認識,因為我要寫出來,寫出來的實驗報告不僅我自己能看明白,更關鍵的是別人能看明白。這樣就要求我用簡練的語言來描述我的算法,而且對我的語言組織能力也是一次考驗。
總之,這次課程設計讓我對數據結構有了更深的認識,不僅體現在知識上,還體現在對知識的認識、對學習的認識和對方法的認識。
第三篇:數據結構與算法課程設計 心得體會 學習體會
課程設計的心得體會
陳康蔭080401200708級計科系計本(2)班
完成了這次的二元多項式加減運算問題的課程設計后,我的心得體會很多,細細梳理一下,有以下幾點:
1、程序的編寫中的語法錯誤及修改
因為我在解決二元多項式問題中,使用了鏈表的方式建立的二元多項式,所以程序的空間是動態的生成的,而且鏈表可以靈活地添加或刪除結點,所以使得程序得到簡化。但是出現的語法問題主要在于子函數和變量的定義,降序排序,關鍵字和函數名稱的書寫,以及一些庫函數的規范使用,這些問題均可以根據編譯器的警告提示,對應的將其解決。
2、程序的設計中的邏輯問題及其調整
我在設計程序的過程中遇到許多問題,首先在選擇數據結構的時候選擇了鏈表,但是鏈表的排序比較困難,特別是在多關鍵字的情況下,在一種關鍵字確定了順序以后,在第一關鍵字相同的時候,按某種順序對第二關鍵字進行排序。在此程序中共涉及到3個量數,即:系數,x的指數和y的指數,而關鍵字排是按x的指數和y的指數來看,由于要求是降冪排序且含有2個關鍵字,所以我先選擇x的指數作為第一關鍵字,先按x的降序來排序,當x的指數相同時,再以y為關鍵字,按照y的指數大小來進行降序排列。
另外,我在加法函數的編寫過程中也遇到了大量的問題,由于要同時比較多個關鍵字,而且設計中涉及了數組和鏈表的綜合運用,導致反復修改了很長的時間才完成了一個加法的設計。但是,現在仍然有一個問題存在:若以0為系數的項是首項則顯示含有此項,但是運算后則自動消除此項,這樣是正確的。但是當其不是首項的時候,加法函數在顯示的時候有0為系數的項時,0前邊不顯示符號,當然,這樣也可以理解成當系數為0時,忽略這一項。這也是本程序中一個不完美的地方。
我在設計減法函數的時候由于考慮不夠充分就直接編寫程序,走了很多彎路,不得不停下來仔細研究算法,后來發現由于前邊的加法函數完全適用于減法,只不過是將二元多項式B的所有項取負再用加法函數即可,可見算法的重要性不低于程序本身。
3、程序的調試中的經驗及體會
我在調試過程中,發生了許多小細節上的問題,它們提醒了自己在以后編程的時候要注意細節,即使是一個括號的遺漏或者一個字符的誤寫都會造成大量的錯誤,浪費許多時間去尋找并修改,總結的教訓就是寫程序的時候,一定要仔細、認真、專注。
我還有一個很深的體會就是格式和注釋,由于平時不注意格式和注釋這方面的要求,導致有的時候在檢查和調試的時候很不方便。有的時候甚至剛剛完成一部分的編輯,結果一不注意,就忘記了這一部分程序的功能。修改的時候也有不小心誤刪的情況出現。如果注意格式風格,并且養成隨手加注釋的習慣,就能減少這些不必要的反復和波折。還有一點,就是在修改的時候,要注意修改前后的不同點在哪里,改后調試結果要在原有的基礎上更加精確。
第四篇:數據結構與算法課程設計 心得體會 學習體會
課程設計的心得體會
每一次課程設計,都有不一樣的感受,通過課程設計,對我而言,得到的不僅僅是知識,更是獲得知識的方法,這顯得更加的重要。
本次課程設計,我的設計題目是校園導游程序,本程序主要用到的是課本中圖的知識,以校園中的景點作為頂點,以景點間的路徑作為邊,就構成了圖。我用到的時臨界表存儲結構,這樣對空間的浪費不至于很大。主要完成的功能是最短路徑和所有路徑的算法,最短路徑用的是書上的Dijkstra算法,原來我對這個算法的只是出于一個對大致的過程知道的程度,課程設計之后,我對該算法可以說是很熟悉了,不管是算法思想還是代碼。另一個主要功能是求兩個景點間的所有路徑,這個算法書上沒有提到,我一步步的摸索,用了一個遞歸的思想,再經過不斷的修改,一次次的單步運行,通過查看相應變量的變化情況,將此算法實現的。最后完成整個程序。
課程設計,本人感覺對于寫程序,首先要要的是思想,即完成每個功能需要的算法思想,在想好思想后,就要具體到代碼,計算機能夠識別的代碼,代碼寫好后,大多情況下是有錯誤的,首先要排除語法錯誤,然后時語義錯誤,在排錯的過程中,我用到的最多的是單步運行,感覺單步運行這種方式很管用,通過一步步的運行,通過每一步的運行,觀察其中變量的變化情況,可以很容易的知道代碼是哪一步出了錯誤,這樣對排錯有很大的幫助。在課程設計的過程中,曾遇到過很多的問題,如對路徑字符串的處理,整個遞歸一步步的往下調用和返回過程,還有很多細節的問題。在遇到問題時,首先想到的是自己思考,分析過程,查找資料,上網百度,通過自己的努力還沒有解決時,這是首先需要問的是自己旁邊的同學,和同學討論,有時還爭得面紅耳赤,如果最后將此不下,就向老師提問。這課程設計的過程中,我幾乎所有的問題處理流程就是這個樣子的。我感覺這就是一種學習的方法,在學習中遇到難題時的學習方法,要把這種學習的方法變成一種習慣,這才是每次課程設計應達到的一種效果。
課程設計提供了這樣一種學習的機會,可以隨時隨地向老師請教,和老師交流的一個機會,和同學互相討論的機會。課程設計教會了我,如何用計算機程序來處理現實中的實際問題。將現實中的實際問題先轉化為數學模型,然后將數學模型用程序解決的一種能力。
第五篇:數據結構與算法課程設計 心得體會 學習體會(42)
心得體會
通過本次課程設計,對圖的概念有了一個新的認識,在學習離散數學的時候,總覺得圖是很抽象的東西,但是在學習了《數據結構與算法》這門課程之后,我慢慢地體會到了其中的奧妙,圖能夠在計算機中存在,首先要捕捉他有哪些具體化、數字化的信息,比如說權值、頂點個數等,這也就說明了想要把生活中的信息轉化到計算機中必須用數字來完整的構成一個信息庫,而圖的存在,又涉及到了頂點之間的聯系。圖分為有向圖和無向圖,而無向圖又是有向圖在權值雙向相等下的一種特例,如何能在計算機中表示一個雙向權值不同的圖,這就是一件很巧妙的事情,經過了思考和老師同學的幫助,我用edges[i][j]=up和edges[j][i]=up就能實現了一個雙向圖信息的存儲。
對整個程序而言,Dijkstra算法始終都是核心內容,其實這個算法在實際思考中并不難,也許我們誰都知道找一個路徑最短的方法,及從頂點一步一步找最近的路線并與其直接距離相比較,但是,在計算機中實現這么一個很簡單的想法就需要涉及到很多專業知識,為了完成設計,在前期工作中,基本都是以學習C語言為主,所以浪費了很多時間,比如說在程序中,刪除頂點和增加頂點的模塊中都有和建圖模塊相互重復的函數,但是由于技術的原因,只能做一些很累贅的函數,可見在調用知識點,我沒有掌握好。不過,有了這次課程設計的經驗和教訓,我能夠很清楚的對自己定一個合適的水平,而且在這次課程設計中我學會了運用兩個新的函數sprintf()和包涵在#include