米明高
【摘 要】數(shù)據(jù)結(jié)構(gòu)作為一門研究程序設(shè)計(jì)問題的學(xué)科為學(xué)習(xí)計(jì)算機(jī)的人員提供很好的理論基礎(chǔ),但是由于它比較抽象,學(xué)習(xí)起來并不容易,因此編寫相應(yīng)的教學(xué)軟件是很必要的,我們可以用VC++6.0開發(fā)環(huán)境來實(shí)現(xiàn)?,F(xiàn)在采用Win32應(yīng)用程序風(fēng)格來介紹一個(gè)簡單實(shí)用的數(shù)據(jù)結(jié)構(gòu)教學(xué)軟件,在這個(gè)應(yīng)用程序中實(shí)現(xiàn)了線性表、字符串、矩陣、排序等基本數(shù)據(jù)結(jié)構(gòu)的屬性描述及算法演示。
【關(guān)鍵詞】VC++6.0;線性表;字符串;矩陣;排序;數(shù)據(jù)結(jié)構(gòu);設(shè)計(jì)
實(shí)現(xiàn)算法演示的思路是利用兩個(gè)字窗口分別作為動(dòng)態(tài)演示區(qū)和演示程序區(qū)。在實(shí)現(xiàn)過程中,為了避免多窗口造成混亂,每產(chǎn)生一個(gè)窗口就將其句柄用一個(gè)全局變量描述;在算法演示區(qū)需要采用動(dòng)態(tài)圖形從而比較形象地演示算法的運(yùn)行過程,其方法是標(biāo)當(dāng)前執(zhí)行語句,另外用一個(gè)布爾變量的變化來標(biāo)識(shí)用戶發(fā)出的中斷要求。
刪除結(jié)點(diǎn)算法狀態(tài)如下:
1.程序入口的設(shè)計(jì)分析
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
MSG Msg;
WNDCLASS wndclass; //窗口類
mm=::LoadMenu(hInstance,“mjc”);
//menu=::LoadMenu(hInstance,“mmg”);
HACCEL hAccel;
hInst=hInstance;
tt=nShowCmd;
char lpszClassName[]=“潼南一中”; //窗口類名
char lpszTitle[]=“微機(jī)室”; //窗口標(biāo)題
//窗口類的定義
2.消息處理函數(shù)
在窗口登記時(shí),將窗口處理消息的函數(shù)設(shè)置為:
wndclass.lpfnWndProc=WndProc;
WndProc函數(shù)的定義為:
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
3.排序?qū)υ捒虻脑O(shè)計(jì)
排序?qū)υ捒虻墓δ苁菣z查算法選擇和序列設(shè)置,調(diào)用不同的對(duì)話框,如下圖:
4.排序過程的設(shè)計(jì)
排序過程是根據(jù)排序設(shè)置選擇相應(yīng)的排序算法,主要實(shí)現(xiàn)的函數(shù)如下:
long FAR PASCAL PXProc( )
{
char sz[255];
char sz0[255];
char *sz1=“直接插入排序動(dòng)態(tài)演示”;
char *sz2=“折半插入排序動(dòng)態(tài)演示”;
char *sz3=“表插入排序動(dòng)態(tài)演示”;
char *sz4=“快速排序動(dòng)態(tài)演示”;
char *sz5=“歸并排序動(dòng)態(tài)演示”;
char *sz6=“直接插入排序程序演示”;
char *sz7=“折半插入排序程序演示”;
char *sz8=“表插入排序程序演示”;
char *9=“快速排序程序演示”;
char *10=“歸并排序程序演示”;
排序算法的演示是整個(gè)應(yīng)用程序的核心,但實(shí)現(xiàn)并不復(fù)雜,只要對(duì)接收到的消息作出正確判斷,并合理控制繪制句柄,必要的情況下,需要將一些子任務(wù)模塊化,由更供低一級(jí)的子函數(shù)實(shí)現(xiàn),我們就可以看到圖形和語句像我們希望的那樣在窗口上活動(dòng)起來。
這里介紹的win32應(yīng)用程序功能并不復(fù)雜,但從它的實(shí)現(xiàn)上我們可以進(jìn)一步掌握窗口的設(shè)計(jì)、登記、創(chuàng)建和顯示的實(shí)現(xiàn)過程;另外還可以清楚地認(rèn)識(shí)到消息處理在win32應(yīng)用程序中的顯著地位。在此例中可以根據(jù)需要自定義消息,并通過消息處理函數(shù)來完成不同的功能。
當(dāng)然,在靈活使用消息的同時(shí),也發(fā)現(xiàn)管理消息定義和消息響應(yīng)工作是相當(dāng)復(fù)雜的,只有對(duì)整個(gè)應(yīng)用有清楚、全面的認(rèn)識(shí),才能夠自如地處理消息,否則整個(gè)應(yīng)用程序?qū)a(chǎn)生無數(shù)的執(zhí)行錯(cuò)誤,而且由于消息處理的特殊性,使其調(diào)試難度更大。
【參考文獻(xiàn)】
[1]黃維通編著.面向?qū)ο笈c可視化程序設(shè)計(jì).北京:清華大學(xué)出版社,2000
[2]潘愛民等譯.Visual C++技術(shù)內(nèi)幕(第四版).北京:清華大學(xué)出版社,1998
[3]錢能編著.C++程序設(shè)計(jì)教程.北京:清華大學(xué)出版社,1999