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