王艷君
西安歐亞學(xué)院信息工程學(xué)院計算機應(yīng)用與網(wǎng)絡(luò)教研室,陜西西安 710065
基于VC++的動態(tài)教學(xué)演示軟件的設(shè)計與實現(xiàn)
王艷君
西安歐亞學(xué)院信息工程學(xué)院計算機應(yīng)用與網(wǎng)絡(luò)教研室,陜西西安 710065
該動態(tài)演示系統(tǒng)利用VC++開發(fā)平臺,設(shè)計了數(shù)據(jù)結(jié)構(gòu)課程的順序表的存儲結(jié)構(gòu)、順序表的操作過程、單鏈表的存儲結(jié)構(gòu)、單鏈表的操作過程、入棧、出棧的過程、入隊列、出隊列的過程、串的操作過程、二叉樹的遍歷過程、圖的遍歷過程、最小生成樹的產(chǎn)生過程、排序過程、查找過程等內(nèi)容的教學(xué)演示軟件。本文主要對前插法建立單鏈表、從單鏈表中刪除數(shù)據(jù)、向單鏈表中插入數(shù)據(jù)的算法和設(shè)計進行了說明。
教學(xué)軟件;單鏈表;動態(tài)演示
計算機輔助教學(xué)軟件開發(fā)和運用,使教學(xué)媒體有了質(zhì)的飛躍,使教學(xué)手段更加豐富,對教學(xué)效果的提高起到促進作用。因此,其在教學(xué)上的運用十分有利于學(xué)生的發(fā)展,更符合現(xiàn)代化教學(xué)規(guī)律的要求。數(shù)據(jù)結(jié)構(gòu)課程是計算機學(xué)科的一門核心課程,它比較抽象,尤其初學(xué)者對數(shù)據(jù)在內(nèi)存中是如何存儲的,數(shù)據(jù)在計算機中是何處理的,都不是很明確,那么開發(fā)一個數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)是為了給學(xué)生提供形象生動、內(nèi)容豐富、直觀具體、感染力強的感性認(rèn)識材料,使學(xué)生不再憑空想象,難題無須多講,“百聞不如一見”。教學(xué)軟件的開發(fā)對教師來說也可以大大減少工作時間,對學(xué)生來說可以按照自己的進度學(xué)習(xí),有利于調(diào)動其學(xué)習(xí)積極性,有利于培養(yǎng)學(xué)生的思維能力及解決問題的能力。
本教學(xué)軟件是基于VC++6.0設(shè)計一個數(shù)據(jù)結(jié)構(gòu)課程的動態(tài)演示系統(tǒng),包括描述順序表的存儲結(jié)構(gòu)的概念,順序表的操作過程,描述單鏈表存儲結(jié)構(gòu)的概念,單鏈表的操作過程,入棧、出棧的過程,入隊列、出隊列的過程,串的操作過程,串的模式匹配過程,二叉樹的遍歷過程,圖的遍歷過程,最小生成樹算法的演示過程,排序算法的演示過程,查找算法的演示過程。
現(xiàn)就針對單鏈表的部分教學(xué)內(nèi)容的動態(tài)演示的設(shè)計過程予以說明。
單鏈表存儲結(jié)構(gòu)的功能是描述單鏈表的存儲結(jié)構(gòu)、單鏈表的表示方法、單鏈表的存儲結(jié)構(gòu)示意圖。采用消息響應(yīng)函數(shù)OnLinkertablestruct()實現(xiàn)。
其功能是動態(tài)演示用戶輸入的數(shù)據(jù)串序列建立單鏈表的過程。單鏈表的創(chuàng)建算法是首先創(chuàng)建頭指針h和頭節(jié)點head,插入節(jié)點時,使掃描指針p指向插入位置的前一個結(jié)點,然后為要插入的結(jié)點開辟存儲空間,使指針q指向這個結(jié)點,將要插入的數(shù)據(jù)元素x插入到q指針指向結(jié)點的數(shù)據(jù)域(即q→date=x),將待插入數(shù)據(jù)元素位置的前一個結(jié)點的指針域賦給待插數(shù)據(jù)元素位置結(jié)點的指針域(即q→next=p→next),斷開待插位置前一結(jié)點的指針域,使其指向待插入的結(jié)點(即p→next=q)。
其繪圖算法是在x軸等于100,y軸等于100的地方繪制一個矩形,使其做為頭結(jié)點,在x軸等于等于600,y軸等于240的地方繪制一個矩形,使其做為插入的第一個結(jié)點,然后每新增加一個結(jié)點x軸坐標(biāo)減130,y軸坐標(biāo)不變。采用消息響應(yīng)函數(shù):OnCreatlinkertable(),實現(xiàn)過程是在創(chuàng)建鏈表過程中連接兩個結(jié)點,需要用畫線折線的函數(shù)BOOL Polyline(LPPOINT lpPoints, int nCount),這個函數(shù)用來畫一條折線。其中l(wèi)pPoints參數(shù)是指向折線頂點的數(shù)組指針,nCount參數(shù)是指定折線頂點數(shù)組中的頂點數(shù)。
其功能是動態(tài)演示在單鏈表中插入一個數(shù)據(jù)元素的全過程。由用戶輸入一串單鏈表數(shù)據(jù),輸入一個插入位置,輸入一個想要插入的數(shù)據(jù)元素,該系統(tǒng)會自動將要插入位置的指針斷開,將要插入的數(shù)據(jù)元素插入到鏈表中。體現(xiàn)了兩種算法:
1)向鏈表中插入數(shù)據(jù)元素的算法:要在帶頭節(jié)點的單鏈表數(shù)據(jù)元素ai(i大于等于0且小于鏈表的數(shù)據(jù)元素的個數(shù))結(jié)點前插入一個存放數(shù)據(jù)元素x的結(jié)點,首先要在單鏈表中尋找到存放數(shù)據(jù)元素ai-1的結(jié)點并由指針p指示,然后動態(tài)申請一個結(jié)點存儲空間并由指針q指示,并把數(shù)據(jù)元素x的值賦予新結(jié)點的數(shù)據(jù)元素域(即q→data=x),最后修改新結(jié)點的指針域指向數(shù)據(jù)元素ai結(jié)點(q→next=p→next),并修改數(shù)據(jù)元素ai-1結(jié)點的指針域指向新結(jié)點q(即p→next=q)。
2)繪圖算法:在x軸等于50,y軸等于160的位置畫一個矩形,使其作為頭結(jié)點。以后每隔50個像素畫一個矩形做為鏈表的元素,直到矩形的個數(shù)等于鏈表數(shù)據(jù)元素的個數(shù)。待插結(jié)點的x軸坐標(biāo)是以插入位置結(jié)點x軸坐標(biāo)作為基準(zhǔn)的,y軸坐標(biāo)為260。
采用消息響應(yīng)函數(shù)OnLinkertableinsert()實現(xiàn)功能。
其功能是用戶輸入要刪除的位置,系統(tǒng)就會將要刪除位置的結(jié)點從鏈表中去掉。由兩種算法體現(xiàn):
1)從鏈表中刪除數(shù)據(jù)元素的算法:要在帶頭結(jié)點的單鏈表中刪除數(shù)據(jù)元素ai結(jié)點,首先需要在單鏈表中尋找到存放數(shù)據(jù)元素ai-1的結(jié)點并由指針p指示,然后讓指針s指向數(shù)據(jù)元素ai結(jié)點(即s=p→next)并把數(shù)據(jù)元素ai的值賦予x(即x=s→date),最后刪除數(shù)據(jù)元素ai結(jié)點(p→next=p→next→next),并動態(tài)釋放數(shù)據(jù)元素ai結(jié)點的存儲空間。
2)繪圖算法:從x軸坐標(biāo)為50,y軸坐標(biāo)為160的地方每隔50個像素依次繪制一個矩形,直到矩形個數(shù)等于鏈表元素個數(shù)加1,鏈表繪制完成。動態(tài)演示刪除過程時,用紅色筆畫線將待刪元素位置的前一個矩形和待刪元素位置的后一個矩形連接起來,再用白色筆畫線將原來待刪位置與前一矩形之間的連線和待刪位置與后一矩形之間的連線用白色筆重繪。
采用消息響應(yīng)函數(shù)OnLinkertabledelete()實現(xiàn)功能。
TP31
A
1674-6708(2010)28-0224-01