版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃合同丙方義務(wù)
- 城市改造開發(fā)商施工合同
- 貿(mào)易中介合同范本
- 債權(quán)轉(zhuǎn)為股份協(xié)議
- 耐高溫材料筒倉(cāng)建設(shè)協(xié)議
- 昆明市二手房買賣合同速成
- 2025年度數(shù)據(jù)中心暖通設(shè)備供應(yīng)與安裝工程合同
- 2025年分步重復(fù)光刻機(jī)項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模板
- 無(wú)人配送物流系統(tǒng)網(wǎng)絡(luò)施工協(xié)議
- 交通運(yùn)輸公司調(diào)度員聘用合同書
- 2025初級(jí)會(huì)計(jì)職稱《初級(jí)會(huì)計(jì)實(shí)務(wù)》全真模擬試及答案解析(3套)
- 2025年1月山西、陜西、寧夏、青海普通高等學(xué)校招生考試適應(yīng)性測(cè)試(八省聯(lián)考)歷史試題 含解析
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之6:“4組織環(huán)境-4.4創(chuàng)新管理體系”(雷澤佳編制-2025B0)
- 2024-2030年撰寫:中國(guó)汽車半軸行業(yè)發(fā)展趨勢(shì)及競(jìng)爭(zhēng)調(diào)研分析報(bào)告
- 北疆文化全媒體傳播體系的構(gòu)建與實(shí)踐
- 2025屆福建省廈門市重點(diǎn)中學(xué)高三第二次聯(lián)考語(yǔ)文試卷含解析
- OpenCV計(jì)算機(jī)視覺基礎(chǔ)教程(Python版)教學(xué)教案
- 2024年度二人合伙光伏發(fā)電項(xiàng)目投資合同3篇
- 《涉江采芙蓉》 課件高中語(yǔ)文統(tǒng)編版必修上冊(cè)
- 管道護(hù)理小組工作總結(jié)
- 北京市西城區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期數(shù)學(xué)期末試卷(含答案)
評(píng)論
0/150
提交評(píng)論