數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)方案_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)方案_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)方案_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)方案_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)方案_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中南大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告題 目: 數(shù)據(jù)結(jié)構(gòu)演示系統(tǒng)(1) 院 系: 信息科學(xué)與工程學(xué)院 班 級(jí): 計(jì)算機(jī) 0904 姓 名: 學(xué) 程 學(xué) 號(hào): 0909091322 指導(dǎo)老師: 再 良 完成時(shí)間: 2011. 07 目錄第1章需求分析3一、順序表部分3二、鏈表部分3三、KMP部分3第2章概要設(shè)計(jì)5一、數(shù)據(jù)結(jié)構(gòu)5二、程序主流程6三、模塊層次6第3章詳細(xì)設(shè)計(jì)8一、數(shù)據(jù)類型8二、相關(guān)函數(shù)9三、詳細(xì)流程10四、重要算法10五、重要存儲(chǔ)結(jié)構(gòu)25第4章調(diào)試分析26一、問題與解決26二、性能分析26第5章測(cè)試結(jié)果27一、主窗口27二、順序表演示27三、鏈表演示28四、KMP演示29五、錯(cuò)誤輸入處理30六

2、、設(shè)計(jì)總結(jié)31七、參考文獻(xiàn)32八、附錄32第1章 需求分析一、 順序表部分1. 創(chuàng)建根據(jù)用戶輸入,創(chuàng)建順序表,表中各元素以空格分隔顯示。非空順序表為后續(xù)其它操作的前提。輸入數(shù)據(jù)為各合法字符(含中文)。2. 插入根據(jù)用戶輸入,在指定位置插入指定元素,其中位置標(biāo)識(shí)從0開始。若用戶輸入位置超出順序表位置圍,給出越界錯(cuò)誤提示;若用戶未輸入插入元素,亦給出相應(yīng)提示。插入元素為各合法字符,插入位置為0-100間整數(shù)。3. 刪除根據(jù)用戶輸入,刪除順序表中指定位置對(duì)應(yīng)元素,并返回被刪除元素,其中位置標(biāo)識(shí)從0開始。若用戶輸入位置超出順序表位置圍,給出相應(yīng)錯(cuò)誤提示。刪除位置輸入為0-100間整數(shù)。4. 合并根據(jù)用

3、戶輸入,將輸入無(wú)序表排序后,進(jìn)行有序合并。輸入數(shù)據(jù)為各合法字符。二、 鏈表部分1. 創(chuàng)建根據(jù)用戶輸入,創(chuàng)建順序表,表中各元素以 -> 分隔顯示。創(chuàng)建過(guò)程中采用頭插法創(chuàng)建。非空鏈表為后續(xù)其它操作的前提。輸入數(shù)據(jù)為各合法字符(含中文)。2. 查找根據(jù)用戶輸入,返回指定元素在鏈表中的位置(其中位置坐標(biāo)從0開始)。若所查找元素在鏈表中不存在,給出提示相應(yīng)信息,并設(shè)置坐標(biāo)位置為 -1。查找輸入為各合法字符。3. 插入根據(jù)用戶輸入,在指定位置插入指定元素,若輸入位置超出鏈表圍,給出越界錯(cuò)誤提示;若用戶未輸入插入元素,亦給出相應(yīng)提示提示。入元素為各合法字符,插入位置為0-100間整數(shù)。4. 刪除根據(jù)用

4、戶輸入,刪除鏈表中指定位置對(duì)應(yīng)元素,并返回被刪除元素。若用戶輸入位置超出鏈表圍,給出相應(yīng)錯(cuò)誤提示。刪除位置輸入為0-100間整數(shù)。5. 合并根據(jù)用戶輸入,將輸入無(wú)序表排序后,進(jìn)行有序合并。輸入數(shù)據(jù)為各合法字符。三、 KMP部分1. 數(shù)據(jù)輸入輸入主串與模式串元素為各合法輸入(含中文)。2. 求解next對(duì)用戶輸入模式串T根據(jù)KMP算法求解各元素對(duì)應(yīng)next值。3. 模式匹配利用求得的next值對(duì)用戶輸入的主串S與模式串T進(jìn)行模式匹配,并返回匹配結(jié)果信息。4. 求解nextval對(duì)用戶輸入模式串T根據(jù)改進(jìn)算法求解各元素對(duì)應(yīng)nextval值。第2章 概要設(shè)計(jì)一、 數(shù)據(jù)結(jié)構(gòu)1. 主對(duì)話框class C

5、DS_DEMO_1Dlg : public CDialog /構(gòu)造函數(shù) 與 其它基本數(shù)據(jù)元素與操作 public:各控件事件2. 順序表class CSqDialog : public CDialog /構(gòu)造函數(shù) 與 其它基本數(shù)據(jù)元素與操作protected:各控件變量 與 其它相關(guān)變量public:各控件事件 與 其它成員函數(shù)全局友元3. 鏈表class CListDialog : public CDialog /構(gòu)造函數(shù) 與 其它基本數(shù)據(jù)元素與操作protected:各控件變量 與 其它相關(guān)變量public:各控件事件 與 其它成員函數(shù)全局友元4. KMPclass CKmpDialog

6、: public CDialog /構(gòu)造函數(shù) 與 其它基本數(shù)據(jù)元素與操作protected:各控件變量 與 其它相關(guān)變量public:各控件事件 與 其它成員函數(shù)全局友元二、 程序主流程主對(duì)話框順序表演示鏈表演示KMP演示插入刪除合并查找插入刪除合并NEXT求解NEXTVAL求解模式匹配三、 模塊層次主對(duì)話框響應(yīng)三個(gè)不同單擊事件,對(duì)應(yīng)打開三個(gè)模態(tài)對(duì)話框:順序表演示、鏈表演示、KMP演示。1. 順序表演示創(chuàng)建按鈕:響應(yīng)事件,將用戶輸入轉(zhuǎn)換為以空格分隔的順序表輸出到對(duì)應(yīng)文本框。若此時(shí)順序表非空,啟用插入、刪除按鈕。插入按鍵:響應(yīng)事件,在順序表非空與插入位置合法時(shí),按用戶輸入將元素插入到指定位置。刪

7、除按鈕:響應(yīng)事件,在順序表非空與刪除位置合法時(shí),將用戶指定位置對(duì)應(yīng)元素從順序表中刪除,并返回該元素。合并按鈕:響應(yīng)事件,將用戶輸入的兩個(gè)無(wú)序表排序后進(jìn)行有序合并。合并操作不依賴于創(chuàng)建操作。2. 鏈表演示創(chuàng)建按鈕:響應(yīng)事件,將用戶輸入轉(zhuǎn)換為以 -> 分隔的鏈表輸出到對(duì)應(yīng)文本框。若此時(shí)鏈表非空,啟用查找、插入、刪除按鈕。查找按鈕:響應(yīng)事件,從鏈表中查找用戶輸入元素。查找成功時(shí),返回元素位置;查找失敗時(shí),給出提示信息。插入按鈕:響應(yīng)事件,在鏈表非空與插入位置合法時(shí),在鏈表中指定位置插入指定元素。刪除按鈕:響應(yīng)事件,在鏈表非空與刪除位置合法時(shí),刪除鏈表中指定位置元素,并返回被刪除元素。合并按鈕:

8、響應(yīng)事件,將用戶輸入的兩個(gè)無(wú)序表排序后進(jìn)行有序合并。合并操作不依賴于創(chuàng)建操作。3. KMP演示輸入按鈕:響應(yīng)事件,獲取用戶主串與模式串?dāng)?shù)據(jù)輸入。當(dāng)模式串非空時(shí),啟用求NEXT、求NEXTVAL按鈕;當(dāng)模式串與主串均非空時(shí),啟用匹配按鈕。求NEXT按鈕:響應(yīng)事件,求取KMP算法中模式串各元素的next值。匹配按鈕:響應(yīng)事件,根據(jù)KMP算法,對(duì)主串與模式串進(jìn)行匹配操作。求NEXTVAL按鈕:響應(yīng)事件,求取KMP改進(jìn)算法中模式串各元素的nextval值。4. 窗口關(guān)閉按鈕無(wú)演示操作時(shí),單擊關(guān)閉按鈕,關(guān)閉當(dāng)前對(duì)話框并返回上級(jí)對(duì)話框或退出演示程序;演示操作進(jìn)行過(guò)程中,關(guān)閉按鈕禁用,防止意外程序終止發(fā)生。

9、第3章 詳細(xì)設(shè)計(jì)一、 數(shù)據(jù)類型1. 順序表CString m_CurrSq;/ 當(dāng)前順序表 各元素以 空格 分隔int m_CurrLength;/ 當(dāng)前順序表 表長(zhǎng)int m_CurrSize;/ 當(dāng)前順序表 容量int m_InsertPos;/ 元素插入位置CString m_InsertValue;/ 待插入元素CString m_OpValue;/ 當(dāng)前操作元素int m_OpPos;/ 當(dāng)前操作位置int m_DeletePos;/ 刪除元素位置CString m_DeleteValue;/ 刪除元素值CString m_StringA;/ 待排序原始表ACString m_Str

10、ingB;/ 待排序原始表BCString m_SortedA;/ 已排序有序表ACString m_SortedB;/ 已排序有序表BCString m_SortedC;/ 排序后合并表Cint m_PosA;/ 當(dāng)前有序A操作元素位置int m_PosB;/ 當(dāng)前有序表B操作元素位置CString m_ValueA;/ 當(dāng)前有序表A操作元素CString m_ValueB;/ 當(dāng)前有序表B操作元素2. 鏈表CString m_CreateList;/ 創(chuàng)建操作中原始鏈表int m_CurrLength;/ 當(dāng)前表長(zhǎng) 不含頭結(jié)點(diǎn)CString m_CurrList;/ 當(dāng)前鏈表 以 ->

11、; 分隔CString m_OpValue;/ 當(dāng)前操作元素int m_OpPos;/ 當(dāng)前操作元素原始位置CString m_ListA;/ 待排序原始鏈表ACString m_ListB;/ 待排序鏈表BCString m_SortedC;/ 合并后鏈表C -> 分隔CString m_SortedA;/ 已排序鏈表ACString m_SortedB;/ 已排序鏈表Bint m_PosA;/ 當(dāng)前操作中鏈表A元素位置int m_PosB;/ 當(dāng)前操作中鏈表B元素位置CString m_ValueA;/ 當(dāng)前操作中鏈表A元素值CString m_ValueB;/ 當(dāng)前操作中鏈表B元素

12、值int m_DeletePos;/ 待刪除元素位置CString m_DeleteValue;/ 待刪除元素值CString m_FindValue;/ 待查找元素int m_FindPos;/ 待查找元素所以位置 -1為元素不存在int m_InsertPos;/ 元素待插入位置CString m_InsertValue;/ 待插入元素3. KMPCString m_S;/ 原始輸入主串 無(wú)空格分隔CString m_T;/ 原始輸入子串 無(wú)空格分隔CString m_IndexS;/ 模式匹配過(guò)程中主串S 以空格分隔 操作字符以 () 標(biāo)識(shí)CString m_IndexT;/ 模式匹配過(guò)

13、程中子串T 以空格分隔 操作字符以 () 標(biāo)識(shí)CString m_NextT1;/ 求next過(guò)程中模式串T1CString m_NextT2;/ 求next過(guò)程中模式串T2CString m_Next;/ 模式串的next值CString m_NextvalT1;/ 求nextval操作中模式串T1CString m_NextvalT2;/ 求nextval操作中模式串T2CString m_Nextval;/ 求nextval操作中nextval值二、 相關(guān)函數(shù)1. 順序表afx_msg void OnSqCreateButton();/ 響應(yīng)創(chuàng)建按鈕事件afx_msg void OnSq

14、InsertButton();/ 響應(yīng)插入按鈕事件afx_msg void OnSqDeleteButton();/ 響應(yīng)刪除按鈕事件afx_msg void OnSqMergeButton();/ 響應(yīng)合并按鈕事件afx_msg LRESULT OnSqUpdate(WPARAM wParameter,LPARAM lpParameter);/響應(yīng)對(duì)話框數(shù)據(jù)更新2. 鏈表afx_msg void OnListCreateButton();/ 響應(yīng)創(chuàng)建按鍵事件afx_msg void OnListFindButton();/ 響應(yīng)查找按鈕事件afx_msg void OnListInsertB

15、utton();/ 響應(yīng)插入按鈕事件afx_msg void OnListDeleteButton();/ 響應(yīng)刪除按鈕事件afx_msg void OnListMergeButton();/ 響應(yīng)合并按鈕事件afx_msg LRESULT OnListUpdate(WPARAM wParameter,LPARAM lpParameter);/ 響應(yīng)對(duì)話框數(shù)據(jù)更新3. KMPafx_msg void OnKmpInputButton();/ 響應(yīng)數(shù)據(jù)輸入事件afx_msg void OnKmpIndexButton();/ 響應(yīng)模式匹配事件afx_msg void OnKmpNextButto

16、n();/ 響應(yīng)求Next值事件afx_msg void OnKmpNextvalButton();/ 響應(yīng)求Nextval事件afx_msg LRESULT OnKmpUpdate(WPARAM wParameter,LPARAM lpParameter);/ 響應(yīng)對(duì)話框數(shù)據(jù)更新4. 線程處理UINT sqDlgCreate(LPVOID lpParam); /順序表創(chuàng)建UINT sqDlgInsert(LPVOID lpParam) ; /順序表插入U(xiǎn)INT sqDlgDelete(LPVOID lpParam); /順序表刪除UINT sqDlgMerge(LPVOID lpParam)

17、; /順序表合并UINT listDlgCreate(LPVOID lpParam); /鏈表創(chuàng)建UINT listDlgFind(LPVOID lpParam); /鏈表查找UINT listDlgInsert(LPVOID lpParam); /鏈表插入U(xiǎn)INT listDlgDelete(LPVOID lpParam); /鏈表刪除UINT listDlgMerge(LPVOID lpParam); /鏈表合并UINT kmpDlgIndex(LPVOID lpParam); /模式匹配UINT kmpDlgNext(LPVOID lpParam); /求Next值UINT kmpDlg

18、Nextval(LPVOID lpParam); /求Nextval值5. 其它函數(shù)void GetNext(CKmpDialog* pDlg, int next);/求Next 用于模式匹配三、 詳細(xì)流程四、 重要算法1. 順序表算法1.1/順序表創(chuàng)建 線程函數(shù)UINT sqDlgCreate(LPVOID lpParam)CSqDialog* pDlg = (CSqDialog*)lpParam;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕for(int i = 0; i < pDlg->m_CreateSq.GetLength(); +i)pDlg->m_OpPo

19、s = i;pDlg->m_CurrSq += pDlg->m_CreateSq.GetAt(i);pDlg->m_OpValue.SetAt(0, pDlg->m_CreateSq.GetAt(i);pDlg->m_CurrSq += _T(" ");+(pDlg->m_CurrLength);if(pDlg->m_CurrSize <= pDlg->m_CurrLength)pDlg->m_CurrSize *= 2; /增加容量到原容量2倍Sleep(1000);/發(fā)送消息給主線程 更新對(duì)話框pDlg->

20、;SendMessage(WM_USER+1, NULL, NULL);/重新啟用創(chuàng)建按鈕 與 系統(tǒng)菜單關(guān)閉按鈕/若順序表不為空 啟用相關(guān)控件if(0 != pDlg->m_CurrLength)(pDlg->GetDlgItem(IDC_SQ_INSERT_BUTTON)->EnableWindow(TRUE);(pDlg->GetDlgItem(IDC_SQ_DELETE_BUTTON)->EnableWindow(TRUE);return 0;算法1.2/順序表插入 線程函數(shù)UINT sqDlgInsert(LPVOID lpParam)CSqDialog*

21、 pDlg = (CSqDialog*)lpParam;if(pDlg->m_InsertValue.IsEmpty()MessageBox(NULL, _T("不能插入空元素!"), _T("插入元素非法"), MB_OK);return 0;if(pDlg->m_InsertPos > pDlg->m_CurrLength)MessageBox(NULL, _T("請(qǐng)輸入正確的插入位置!"), _T("插入位置越界"), MB_OK);return 0;/更新過(guò)程中 禁用相關(guān)按鈕 與 系

22、統(tǒng)菜單關(guān)閉按鈕+(pDlg->m_CurrLength); /元素長(zhǎng)度加 1if(pDlg->m_CurrSize <= pDlg->m_CurrLength)pDlg->m_CurrSize *= 2;pDlg->m_CurrSq += _T(" "); /給顯示串增加兩個(gè)空字符for(int i = pDlg->m_CurrLength-1; i > pDlg->m_InsertPos; -i)pDlg->m_OpPos = i;if(1 = i)/當(dāng) i 為 1 時(shí) 保留緊接元素 0 的空格pDlg->

23、m_CurrSq.SetAt(2, pDlg->m_CurrSq.GetAt(0);pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(0);elsepDlg->m_CurrSq.SetAt(2*i, pDlg->m_CurrSq.GetAt(2*i-2);pDlg->m_CurrSq.SetAt(2*i-1, pDlg->m_CurrSq.GetAt(2*i-3);pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(2*i-2);Sleep(1000);pDl

24、g->SendMessage(WM_USER+1, NULL, NULL);/插入元素pDlg->m_OpPos = pDlg->m_InsertPos;pDlg->m_CurrSq.SetAt(2 * pDlg->m_InsertPos, pDlg->m_InsertValue.GetAt(0);pDlg->m_OpValue.SetAt(0, pDlg->m_InsertValue.GetAt(0);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單

25、關(guān)閉按鈕return 0;算法1.3/順序表刪除 線程函數(shù)UINT sqDlgDelete(LPVOID lpParam)CSqDialog* pDlg = (CSqDialog*)lpParam;if(pDlg->m_DeletePos > pDlg->m_CurrLength-1)MessageBox(NULL, _T("請(qǐng)輸入正確的刪除位置!"), _T("刪除位置越界"), MB_OK);return 0;/更新過(guò)程中 禁用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕/獲取待刪除元素pDlg->m_DeleteValue.SetAt(0

26、, pDlg->m_CurrSq.GetAt(2*pDlg->m_DeletePos);/刪除前 順序表只有一個(gè)元素if(1 = pDlg->m_CurrLength)pDlg->m_OpPos = 0;pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(0);pDlg->m_CurrLength = 0;pDlg->m_CurrSq = _T(""); /清空順序表Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/刪除成功

27、后 順序表空 只啟用創(chuàng)建按鈕和合并按鈕(pDlg->GetDlgItem(IDC_SQ_CREATE_BUTTON)->EnableWindow(TRUE); (pDlg->GetDlgItem(IDC_SQ_MERGE_BUTTON)->EnableWindow(TRUE);EnableMenuItem(hSysMenu, nCloseItemID, MF_ENABLED);return 0;for(int i = pDlg->m_DeletePos; i < pDlg->m_CurrLength-1; +i)pDlg->m_OpPos = i

28、;if(0 = i)pDlg->m_CurrSq.SetAt(0, pDlg->m_CurrSq.GetAt(2);pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(2);elsepDlg->m_CurrSq.SetAt(2*i, pDlg->m_CurrSq.GetAt(2*i+2);pDlg->m_CurrSq.SetAt(2*i+1, pDlg->m_CurrSq.GetAt(2*i+3);pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(2*i

29、+2);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);pDlg->m_CurrSq.Delete(pDlg->m_CurrSq.GetLength()-2,2);-(pDlg->m_CurrLength);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;算法1.4/順序表合并 線程函數(shù)UINT sqDlgMerge(LPVOID lpParam)CSqDialog* pDlg = (CSqD

30、ialog*)lpParam;/更新過(guò)程中 禁用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕int pa = 0;int pb = 0;int pc = 0;/m_SortedA m_SortedB 含空格分隔符 長(zhǎng)度判斷時(shí)應(yīng)忽略while(pa < pDlg->m_StringA.GetLength() && pb < pDlg->m_StringB.GetLength()if(pDlg->m_SortedA.GetAt(2*pa) < pDlg->m_SortedB.GetAt(2*pb)pDlg->m_SortedC += pDlg-&g

31、t;m_SortedA.GetAt(2*pa);pDlg->m_CurrSq += pDlg->m_SortedA.GetAt(2*pa);pDlg->m_SortedC += _T(" ");pDlg->m_CurrSq += _T(" ");pDlg->m_OpPos = pc;pDlg->m_OpValue = pDlg->m_SortedA.GetAt(2*pa);pDlg->m_PosA = pa;pDlg->m_ValueA = pDlg->m_SortedA.GetAt(2*pa)

32、;+pa;+pc;elsepDlg->m_SortedC += pDlg->m_SortedB.GetAt(2*pb);pDlg->m_CurrSq += pDlg->m_SortedB.GetAt(2*pb);pDlg->m_SortedC += _T(" ");pDlg->m_CurrSq += _T(" ");pDlg->m_OpPos = pc;pDlg->m_OpValue = pDlg->m_SortedB.GetAt(2*pb);pDlg->m_PosB = pb;pDlg->

33、;m_ValueB = pDlg->m_SortedB.GetAt(2*pb);+pb;+pc;+(pDlg->m_CurrLength);if(pDlg->m_CurrSize <= pDlg->m_CurrLength)pDlg->m_CurrSize *= 2;Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);while(pa < pDlg->m_StringA.GetLength()pDlg->m_SortedC += pDlg->m_SortedA.GetAt(2

34、*pa);pDlg->m_CurrSq += pDlg->m_SortedA.GetAt(2*pa);pDlg->m_SortedC += _T(" ");pDlg->m_CurrSq += _T(" ");pDlg->m_OpPos = pc;pDlg->m_OpValue = pDlg->m_SortedA.GetAt(2*pa);pDlg->m_PosA = pa;pDlg->m_ValueA = pDlg->m_SortedA.GetAt(2*pa);+pa;+pc;+(pDlg->

35、;m_CurrLength);if(pDlg->m_CurrSize <= pDlg->m_CurrLength)pDlg->m_CurrSize *= 2;Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);while(pb < pDlg->m_StringB.GetLength()pDlg->m_SortedC += pDlg->m_SortedB.GetAt(2*pb);pDlg->m_CurrSq += pDlg->m_SortedB.GetAt(2*pb);pDlg

36、->m_SortedC += _T(" ");pDlg->m_CurrSq += _T(" ");pDlg->m_OpPos = pc;pDlg->m_OpValue = pDlg->m_SortedB.GetAt(2*pb);pDlg->m_PosB = pb;pDlg->m_ValueB = pDlg->m_SortedB.GetAt(2*pb);+pb;+pc;+(pDlg->m_CurrLength);if(pDlg->m_CurrSize <= pDlg->m_CurrLe

37、ngth)pDlg->m_CurrSize *= 2;Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;2. 鏈表算法2.1/鏈表創(chuàng)建 線程函數(shù)UINT listDlgCreate(LPVOID lpParam)CListDialog* pDlg = (CListDialog*)lpParam;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕for(int i = 0; i < pDlg->m_CreateList.GetLength(); +i)if(1

38、 = pDlg->m_CreateList.GetLength()pDlg->m_CurrList += _T(" -> ");pDlg->m_CurrList.SetAt(5, pDlg->m_CreateList.GetAt(0);+pDlg->m_CurrLength;pDlg->m_OpPos = 0;pDlg->m_OpValue = pDlg->m_CreateList.GetAt(0);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);elsep

39、Dlg->m_CurrList.Insert(1, _T(" -> ");Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);pDlg->m_CurrList.SetAt(5, pDlg->m_CreateList.GetAt(pDlg->m_CreateList.GetLength()-i-1);+pDlg->m_CurrLength;pDlg->m_OpPos = pDlg->m_CreateList.GetLength()-i-1;pDlg->m_OpVa

40、lue = pDlg->m_CreateList.GetAt(pDlg->m_CreateList.GetLength()-i-1);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用創(chuàng)建按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;算法2.2/鏈表元素查找 線程函數(shù)UINT listDlgFind(LPVOID lpParam)CListDialog* pDlg = (CListDialog*)lpParam;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕int i = 1;for( ; i <= p

41、Dlg->m_CurrLength; +i)pDlg->m_OpPos = i-1;pDlg->m_OpValue = pDlg->m_CurrList.GetAt(5*i);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);if(pDlg->m_CurrList.GetAt(5*i) = pDlg->m_FindValue.GetAt(0)pDlg->m_FindPos = i-1;Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL

42、);break;if(i > pDlg->m_CurrLength)MessageBox(NULL, _T("所查找元素不存在!"), _T("查找失敗"), MB_OK);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;算法2.3/鏈表元素插入 線程函數(shù)UINT listDlgInsert(LPVOID lpParam)CListDialog* pDlg = (CListDialog*)lpParam;if(pDlg->m_InsertValue.IsEmpty()MessageBox(NULL, _T("不能插入

43、空元素!"), _T("插入元素非法"), MB_OK);return 0;if(pDlg->m_InsertPos > pDlg->m_CurrLength)MessageBox(NULL, _T("請(qǐng)輸入正確的插入位置!"), _T("插入位置越界"), MB_OK);return 0;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕for(int i = 0; i < pDlg->m_InsertPos; +i)pDlg->m_OpPos = i;pDlg->m_OpValu

44、e = pDlg->m_CurrList.GetAt(5*(i+1);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);pDlg->m_CurrList.Insert(5*(pDlg->m_InsertPos+1), _T(" -> ");Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);pDlg->m_CurrList.SetAt(5*(pDlg->m_InsertPos+1), pDlg->m_Insert

45、Value.GetAt(0);pDlg->m_OpPos = pDlg->m_InsertPos;pDlg->m_OpValue = pDlg->m_InsertValue.GetAt(0);+pDlg->m_CurrLength;Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;算法2.4/鏈表元素刪除 線程函數(shù)UINT listDlgDelete(LPVOID lpParam)CListDialog* pDlg = (CListDialog*

46、)lpParam;if(pDlg->m_DeletePos > pDlg->m_CurrLength-1)MessageBox(NULL, _T("請(qǐng)輸入正確的刪除位置!"), _T("刪除位置越界"), MB_OK);return 0;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕for(int i = 0; i < pDlg->m_DeletePos; +i)pDlg->m_OpPos = i;pDlg->m_OpValue = pDlg->m_CurrList.GetAt(5*(i+1);Slee

47、p(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);pDlg->m_OpValue = pDlg->m_CurrList.GetAt(5*(pDlg->m_DeletePos+1);pDlg->m_OpPos = pDlg->m_DeletePos;pDlg->m_CurrList.SetAt(5*(pDlg->m_DeletePos+1), CString:XCHAR(' ');Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NUL

48、L);pDlg->m_DeleteValue = pDlg->m_OpValue;pDlg->m_CurrList.Delete(5*pDlg->m_DeletePos+1, 5);-pDlg->m_CurrLength;Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;算法2.5/有序鏈表合并 線程函數(shù)UINT listDlgMerge(LPVOID lpParam)CListDialog* pDlg = (CListDialog*)lpPar

49、am;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕int pa = 1;int pb = 1;int pc = 1;/m_SortedA m_SortedB 含 -> 分隔符 長(zhǎng)度判斷時(shí)應(yīng)忽略while(pa <= pDlg->m_ListA.GetLength() && pb <= pDlg->m_ListB.GetLength()if(pDlg->m_SortedA.GetAt(5*pa) < pDlg->m_SortedB.GetAt(5*pb)pDlg->m_SortedC += _T(" ->

50、 ");pDlg->m_CurrList += _T(" -> ");pDlg->m_SortedC += pDlg->m_SortedA.GetAt(5*pa);pDlg->m_CurrList += pDlg->m_SortedA.GetAt(5*pa);pDlg->m_OpPos = pc-1;pDlg->m_OpValue = pDlg->m_SortedA.GetAt(5*pa);pDlg->m_PosA = pa-1;pDlg->m_ValueA = pDlg->m_SortedA

51、.GetAt(5*pa);+pa;+pc;elsepDlg->m_SortedC += _T(" -> ");pDlg->m_CurrList += _T(" -> ");pDlg->m_SortedC += pDlg->m_SortedB.GetAt(5*pb);pDlg->m_CurrList += pDlg->m_SortedB.GetAt(5*pb);pDlg->m_OpPos = pc-1;pDlg->m_OpValue = pDlg->m_SortedB.GetAt(5*pb)

52、;pDlg->m_PosB = pb-1;pDlg->m_ValueB = pDlg->m_SortedB.GetAt(5*pb);+pb;+pc;+(pDlg->m_CurrLength);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);while(pa <= pDlg->m_ListA.GetLength()pDlg->m_SortedC += _T(" -> ");pDlg->m_CurrList += _T(" -> ");

53、pDlg->m_SortedC += pDlg->m_SortedA.GetAt(5*pa);pDlg->m_CurrList += pDlg->m_SortedA.GetAt(5*pa);pDlg->m_OpPos = pc-1;pDlg->m_OpValue = pDlg->m_SortedA.GetAt(5*pa);pDlg->m_PosA = pa-1;pDlg->m_ValueA = pDlg->m_SortedA.GetAt(5*pa);+pa;+pc;+(pDlg->m_CurrLength);Sleep(1000

54、);pDlg->SendMessage(WM_USER+1, NULL, NULL);while(pb <= pDlg->m_ListB.GetLength()pDlg->m_SortedC += _T(" -> ");pDlg->m_CurrList += _T(" -> ");pDlg->m_SortedC += pDlg->m_SortedB.GetAt(5*pb);pDlg->m_CurrList += pDlg->m_SortedB.GetAt(5*pb);pDlg->m_

55、OpPos = pc-1;pDlg->m_OpValue = pDlg->m_SortedB.GetAt(5*pb);pDlg->m_PosB = pb-1;pDlg->m_ValueB = pDlg->m_SortedB.GetAt(5*pb);+pb;+pc;+(pDlg->m_CurrLength);Sleep(1000);pDlg->SendMessage(WM_USER+1, NULL, NULL);/重新啟用相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕return 0;3. KMP算法3.1/KMP模式匹配 線程函數(shù)UINT kmpDlgIndex(LPVOID lpParam)CKmpDialog* pDlg = (CKmpDialog*)lpParam;/更新過(guò)程中 禁用 相關(guān)按鈕 與 系統(tǒng)菜單關(guān)閉按鈕/計(jì)算模式串T 各元素 next 值int* next = newintpDlg->m_T.GetLength()+1;GetNext(pDlg, next);/全局函數(shù) GetNextint i = 1;int j = 1;whi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論