首页 数据结构课程设计报告_数据结构演示系统

数据结构课程设计报告_数据结构演示系统

举报
开通vip

数据结构课程设计报告_数据结构演示系统 中南大学 数据结构课程设计报告 题 目: 数据结构演示系统(1) 院 系: 信息科学与工程学院 班 级: 计算机 0904 姓 名: 张 学 程 学 号: 0909091322 指导老师: 陈 再 良 完成时间: 2011. 07 ...

数据结构课程设计报告_数据结构演示系统
中南大学 数据结构课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 题 目: 数据结构演示系统(1) 院 系: 信息科学与 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院 班 级: 计算机 0904 姓 名: 张 学 程 学 号: 0909091322 指导老师: 陈 再 良 完成时间: 2011. 07 目录 第 1 章 需求分析................................................................................................... 3 一、 顺序 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 部分........................................................................................ 3 二、 链表部分............................................................................................ 3 三、 KMP 部分 ........................................................................................... 3 第 2 章 概要设计................................................................................................... 5 一、 数据结构............................................................................................ 5 二、 程序主流程........................................................................................ 6 三、 模块层次............................................................................................ 6 第 3 章 详细设计................................................................................................... 8 一、 数据类型............................................................................................ 8 二、 相关函数............................................................................................ 9 三、 详细流程.......................................................................................... 10 四、 重要算法.......................................................................................... 10 五、 重要存储结构.................................................................................. 25 第 4 章 调试分析................................................................................................. 26 一、 问题与解决...................................................................................... 26 二、 性能分析.......................................................................................... 26 第 5 章 测试结果................................................................................................. 27 一、 主窗口.............................................................................................. 27 二、 顺序表演示...................................................................................... 27 三、 链表演示.......................................................................................... 28 四、 KMP 演示 ......................................................................................... 29 五、 错误输入处理.................................................................................. 30 六、 设计 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf ................................................................................................. 31 七、 参考文献................................................................................................. 32 八、 附录......................................................................................................... 32 第1章 需求分析 一、 顺序表部分 1. 创建 根据用户输入,创建顺序表,表中各元素以空格分隔显示。非空 顺序表为后续其它操作的前提。输入数据为各合法字符(含中文)。 2. 插入 根据用户输入,在指定位置插入指定元素,其中位置标识从 0 开始。若用户输入位置超出顺序表位置范围,给出越界错误提示;若用 户未输入插入元素,亦给出相应提示。插入元素为各合法字符,插入位 置为 0-100间整数。 3. 删除 根据用户输入,删除顺序表中指定位置对应元素,并返回被删除 元素,其中位置标识从 0开始。若用户输入位置超出顺序表位置范围, 给出相应错误提示。删除位置输入为 0-100间整数。 4. 合并 根据用户输入,将输入无序表排序后,进行有序合并。输入数据 为各合法字符。 二、 链表部分 1. 创建 根据用户输入,创建顺序表,表中各元素以 -> 分隔显示。创建 过程中采用头插法创建。非空链表为后续其它操作的前提。输入数据 为各合法字符(含中文)。 2. 查找 根据用户输入,返回指定元素在链表中的位置(其中位置坐标从 0 开始)。若所查找元素在链表中不存在,给出提示相应信息,并设置 坐标位置为 -1。查找输入为各合法字符。 3. 插入 根据用户输入,在指定位置插入指定元素,若输入位置超出链表 范围,给出越界错误提示;若用户未输入插入元素,亦给出相应提示 提示。入元素为各合法字符,插入位置为 0-100间整数。 4. 删除 根据用户输入,删除链表中指定位置对应元素,并返回被删除元 素。若用户输入位置超出链表范围,给出相应错误提示。删除位置输 入为 0-100间整数。 5. 合并 根据用户输入,将输入无序表排序后,进行有序合并。输入数据 为各合法字符。 三、 KMP 部分 1. 数据输入 输入主串及模式串元素为各合法输入(含中文)。 2. 求解 next 对用户输入模式串 T根据 KMP算法求解各元素对应 next值。 3. 模式匹配 利用求得的 next 值对用户输入的主串 S 及模式串 T 进行模 式匹配,并返回匹配结果信息。 4. 求解 nextval 对用户输入模式串 T 根据改进算法求解各元素对应 nextval 值。 第2章 概要设计 一、 数据结构 1. 主对话框 class CDS_DEMO_1Dlg : public CDialog { …… //构造函数 及 其它基本数据元素与操作 public: 各控件事件 } 2. 顺序表 class CSqDialog : public CDialog { …… //构造函数 及 其它基本数据元素与操作 protected: 各控件变量 及 其它相关变量 public: 各控件事件 及 其它成员函数 全局友元 } 3. 链表 class CListDialog : public CDialog { …… //构造函数 及 其它基本数据元素与操作 protected: 各控件变量 及 其它相关变量 public: 各控件事件 及 其它成员函数 全局友元 } 4. KMP class CKmpDialog : public CDialog { …… //构造函数 及 其它基本数据元素与操作 protected: 各控件变量 及 其它相关变量 public: 各控件事件 及 其它成员函数 全局友元 } 二、 程序主流程 三、 模块层次 主对话框响应三个不同单击事件,对应打开三个模态对话框:顺序表演示、 链表演示、KMP 演示。 1. 顺序表演示 创建按钮:响应事件,将用户输入转换为以空格分隔的顺序表输出到对应文 本框。若此时顺序表非空,启用插入、删除按钮。 插入按键:响应事件,在顺序表非空及插入位置合法时,按用户输入将元素 插入到指定位置。 删除按钮:响应事件,在顺序表非空及删除位置合法时,将用户指定位置对 应元素从顺序表中删除,并返回该元素。 合并按钮:响应事件,将用户输入的两个无序表排序后进行有序合并。合并 操作不依赖于创建操作。 2. 链表演示 创建按钮:响应事件,将用户输入转换为以 -> 分隔的链表输出到对应文本 框。若此时链表非空,启用查找、插入、删除按钮。 查找按钮:响应事件,从链表中查找用户输入元素。查找成功时,返回元素 位置;查找失败时,给出提示信息。 插入按钮:响应事件,在链表非空及插入位置合法时,在链表中指定位置插 入指定元素。 删除按钮:响应事件,在链表非空及删除位置合法时,删除链表中指定位置 元素,并返回被删除元素。 合并按钮:响应事件,将用户输入的两个无序表排序后进行有序合并。合并 操作不依赖于创建操作。 3. KMP演示 输入按钮:响应事件,获取用户主串及模式串数据输入。当模式串非空时, 主 对话 框 顺序 表 演示 链表 演示 KMP 演示 插入 删除 合并 查找 插入 删除 合并 NEXT 求解 NEXT VAL 求解 模式 匹配 启用求 NEXT、求 NEXTVAL 按钮;当模式串及主串均非空时,启用匹配按钮。 求 NEXT按钮:响应事件,求取 KMP算法中模式串各元素的 next值。 匹配按钮:响应事件,根据 KMP算法,对主串及模式串进行匹配操作。 求 NEXTVAL 按钮:响应事件,求取 KMP改进算法中模式串各元素的 nextval 值。 4. 窗口关闭按钮 无演示操作时,单击关闭按钮,关闭当前对话框并返回上级对话框或退出演 示程序;演示操作进行过程中,关闭按钮禁用,防止意外程序终止发生。 第3章 详细设计 一、 数据类型 1. 顺序表 CString m_CurrSq; // 当前顺序表 各元素以 空格 分隔 int m_CurrLength; // 当前顺序表 表长 int m_CurrSize; // 当前顺序表 容量 int m_InsertPos; // 元素插入位置 CString m_InsertValue; // 待插入元素 CString m_OpValue; // 当前操作元素 int m_OpPos; // 当前操作位置 int m_DeletePos; // 删除元素位置 CString m_DeleteValue; // 删除元素值 CString m_StringA; // 待排序原始表A CString m_StringB; // 待排序原始表B CString m_SortedA; // 已排序有序表A CString m_SortedB; // 已排序有序表B CString m_SortedC; // 排序后合并表C int m_PosA; // 当前有序A操作元素位置 int m_PosB; // 当前有序表B操作元素位置 CString m_ValueA; // 当前有序表A操作元素 CString m_ValueB; // 当前有序表B操作元素 2. 链表 CString m_CreateList; // 创建操作中原始链表 int m_CurrLength; // 当前表长 不含头结点 CString m_CurrList; // 当前链表 以 -> 分隔 CString m_OpValue; // 当前操作元素 int m_OpPos; // 当前操作元素原始位置 CString m_ListA; // 待排序原始链表A CString m_ListB; // 待排序链表B CString m_SortedC; // 合并后链表C -> 分隔 CString m_SortedA; // 已排序链表A CString m_SortedB; // 已排序链表B int m_PosA; // 当前操作中链表A元素位置 int m_PosB; // 当前操作中链表B元素位置 CString m_ValueA; // 当前操作中链表A元素值 CString m_ValueB; // 当前操作中链表B元素值 int m_DeletePos; // 待删除元素位置 CString m_DeleteValue; // 待删除元素值 CString m_FindValue; // 待查找元素 int m_FindPos; // 待查找元素所以位置 -1为元素不存在 int m_InsertPos; // 元素待插入位置 CString m_InsertValue; // 待插入元素 3. KMP CString m_S; // 原始输入主串 无空格分隔 CString m_T; // 原始输入子串 无空格分隔 CString m_IndexS; // 模式匹配过程中主串S 以空格分隔 操作字符以 () 标识 CString m_IndexT; // 模式匹配过程中子串T 以空格分隔 操作字符以 () 标识 CString m_NextT1; // 求next过程中模式串T1 CString m_NextT2; // 求next过程中模式串T2 CString m_Next; // 模式串的next值 CString m_NextvalT1; // 求nextval操作中模式串T1 CString m_NextvalT2; // 求nextval操作中模式串T2 CString m_Nextval; // 求nextval操作中nextval值 二、 相关函数 1. 顺序表 afx_msg void OnSqCreateButton(); // 响应创建按钮事件 afx_msg void OnSqInsertButton(); // 响应插入按钮事件 afx_msg void OnSqDeleteButton(); // 响应删除按钮事件 afx_msg void OnSqMergeButton(); // 响应合并按钮事件 afx_msg LRESULT OnSqUpdate(WPARAM wParameter,LPARAM lpParameter); //响应对话框 数据更新 2. 链表 afx_msg void OnListCreateButton(); // 响应创建按键事件 afx_msg void OnListFindButton(); // 响应查找按钮事件 afx_msg void OnListInsertButton(); // 响应插入按钮事件 afx_msg void OnListDeleteButton(); // 响应删除按钮事件 afx_msg void OnListMergeButton(); // 响应合并按钮事件 afx_msg LRESULT OnListUpdate(WPARAM wParameter,LPARAM lpParameter); // 响应对话框 数据更新 3. KMP afx_msg void OnKmpInputButton(); // 响应数据输入事件 afx_msg void OnKmpIndexButton(); // 响应模式匹配事件 afx_msg void OnKmpNextButton(); // 响应求Next值事件 afx_msg void OnKmpNextvalButton(); // 响应求Nextval事件 afx_msg LRESULT OnKmpUpdate(WPARAM wParameter,LPARAM lpParameter); // 响应对话框 数据更新 4. 线程处理 UINT sqDlgCreate(LPVOID lpParam); //顺序表创建 UINT sqDlgInsert(LPVOID lpParam) ; //顺序表插入 UINT sqDlgDelete(LPVOID lpParam); //顺序表删除 UINT sqDlgMerge(LPVOID lpParam); //顺序表合并 UINT listDlgCreate(LPVOID lpParam); //链表创建 UINT listDlgFind(LPVOID lpParam); //链表查找 UINT listDlgInsert(LPVOID lpParam); //链表插入 UINT listDlgDelete(LPVOID lpParam); //链表删除 UINT listDlgMerge(LPVOID lpParam); //链表合并 UINT kmpDlgIndex(LPVOID lpParam); //模式匹配 UINT kmpDlgNext(LPVOID lpParam); //求Next值 UINT kmpDlgNextval(LPVOID lpParam); //求Nextval值 5. 其它函数 void GetNext(CKmpDialog* pDlg, int next[]); //求Next 用于模式匹配 三、 详细流程 演示系 统主对 话框 顺序表 演示 链表 演示 KMP 演示 创建 顺序表 合并 顺序表 元素 插入 元素 删除 创建 顺序表 合并 顺序表 元素 插入 元素 删除 元素 查找 数据 输入 Next 模式 匹配 Nextval 四、 重要算法 1. 顺序表 算法 1.1 //顺序表创建 线程函数 UINT sqDlgCreate(LPVOID lpParam) { CSqDialog* pDlg = (CSqDialog*)lpParam; //更新过程中 禁用 相关按钮 及 系统菜单关闭按钮 ………… for(int i = 0; i < pDlg->m_CreateSq.GetLength(); ++i) { pDlg->m_OpPos = 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); //发送消息给主线程 更新对话框 pDlg->SendMessage(WM_USER+1, NULL, NULL); } //重新启用创建按钮 及 系统菜单关闭按钮 ………… //若顺序表不为空 启用相关控件 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 //顺序表插入 线程函数 UINT sqDlgInsert(LPVOID lpParam) { CSqDialog* 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("请输入正确的插入位置!"), _T("插入位置越界"), MB_OK); return 0; } //更新过程中 禁用相关按钮 及 系统菜单关闭按钮 ………… ++(pDlg->m_CurrLength); //元素长度加 1 if(pDlg->m_CurrSize <= pDlg->m_CurrLength) pDlg->m_CurrSize *= 2; pDlg->m_CurrSq += _T(" "); //给显示串增加两个空字符 for(int i = pDlg->m_CurrLength-1; i > pDlg->m_InsertPos; --i) { pDlg->m_OpPos = i; if(1 == i) {//当 i 为 1 时 保留紧接元素 0 的空格 pDlg->m_CurrSq.SetAt(2, pDlg->m_CurrSq.GetAt(0)); pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(0)); } else { pDlg->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); pDlg->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); //重新启用相关按钮 及 系统菜单关闭按钮 ………… return 0; } 算法1.3 //顺序表删除 线程函数 UINT sqDlgDelete(LPVOID lpParam) { CSqDialog* pDlg = (CSqDialog*)lpParam; if(pDlg->m_DeletePos > pDlg->m_CurrLength-1) { MessageBox(NULL, _T("请输入正确的删除位置!"), _T("删除位置越界"), MB_OK); return 0; } //更新过程中 禁用相关按钮 及 系统菜单关闭按钮 ………… //获取待删除元素 pDlg->m_DeleteValue.SetAt(0, pDlg->m_CurrSq.GetAt(2*pDlg->m_DeletePos)); //删除前 顺序表只有一个元素 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); //删除成功后 顺序表空 只启用创建按钮和合并按钮 (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; if(0 == i) { pDlg->m_CurrSq.SetAt(0, pDlg->m_CurrSq.GetAt(2)); pDlg->m_OpValue.SetAt(0, pDlg->m_CurrSq.GetAt(2)); } else { pDlg->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); 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); //重新启用相关按钮 及 系统菜单关闭按钮 ………… return 0; } 算法1.4 //顺序表合并 线程函数 UINT sqDlgMerge(LPVOID lpParam) { CSqDialog* pDlg = (CSqDialog*)lpParam; //更新过程中 禁用相关按钮 及 系统菜单关闭按钮 ………… int pa = 0; int pb = 0; int pc = 0; //m_SortedA m_SortedB 含空格分隔符 长度判断时应忽略 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->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); ++pa; ++pc; } else { pDlg->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->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*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->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->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_CurrLength) pDlg->m_CurrSize *= 2; Sleep(1000); pDlg->SendMessage(WM_USER+1, NULL, NULL); } //重新启用相关按钮 及 系统菜单关闭按钮 ………… return 0; } 2. 链表 算法 2.1 //链表创建 线程函数 UINT listDlgCreate(LPVOID lpParam) { CListDialog* pDlg = (CListDialog*)lpParam; //更新过程中 禁用 相关按钮 及 系统菜单关闭按钮 ………… for(int i = 0; i < pDlg->m_CreateList.GetLength(); ++i) { if(1 == 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); } else { pDlg->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_OpValue = pDlg->m_CreateList.GetAt(pDlg->m_CreateList.GetLength()-i-1); Sleep(1000); pDlg->SendMessage(WM_USER+1, NULL, NULL); } } //重新启用创建按钮 及 系统菜单关闭按钮 ………… return 0; } 算法 2.2 //链表元素查找 线程函数 UINT listDlgFind(LPVOID lpParam) { CListDialog* pDlg = (CListDialog*)lpParam; //更新过程中 禁用 相关按钮 及 系统菜单关闭按钮 ………… int i = 1; for( ; i <= pDlg->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); break; } } if(i > pDlg->m_CurrLength) MessageBox(NULL, _T("所查找元素不存在!"), _T("查找失败"), MB_OK); //重新启用相关按钮 及 系统菜单关闭按钮 ………… return 0; } 算法2.3 //链表元素插入 线程函数 UINT listDlgInsert(LPVOID lpParam) { CListDialog* pDlg = (CListDialog*)lpParam; if(pDlg->m_InsertValue.IsEmpty()) { MessageBox(NULL, _T("不能插入空元素!"), _T("插入元素非法"), MB_OK); return 0; } if(pDlg->m_InsertPos > pDlg->m_CurrLength) { MessageBox(NULL, _T("请输入正确的插入位置!"), _T("插入位置越界"), MB_OK); return 0; } //更新过程中 禁用 相关按钮 及 系统菜单关闭按钮 ………… for(int i = 0; i < pDlg->m_InsertPos; ++i) { pDlg->m_OpPos = i; pDlg->m_OpValue = 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_InsertValue.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); //重新启用相关按钮 及 系统菜单关闭按钮 ………… return 0; } 算法2.4 //链表元素删除 线程函数 UINT listDlgDelete(LPVOID lpParam) { CListDialog* pDlg = (CListDialog*)lpParam; if(pDlg->m_DeletePos > pDlg->m_CurrLength-1) { MessageBox(NULL, _T("请输入正确的删除位置!"), _T("删除位置越界"), MB_OK); return 0; } //更新过程中 禁用 相关按钮 及 系统菜单关闭按钮 ………… for(int i = 0; i < pDlg->m_DeletePos; ++i) { pDlg->m_OpPos = i; pDlg->m_OpValue = pDlg->m_CurrList.GetAt(5*(i+1)); Sleep(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, NULL); 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); //重新启用相关按钮 及 系统菜单关闭按钮 ………… return 0; } 算法2.5 //有序链表合并 线程函数 UINT listDlgMerge(LPVOID lpParam) { CListDialog* pDlg = (CListDialog*)lpParam; //更新过程中 禁用 相关按钮 及 系统菜单关闭按钮 ………… int pa = 1; int pb = 1; int pc = 1; //m_SortedA m_SortedB 含 -> 分隔符 长度判断时应忽略 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
本文档为【数据结构课程设计报告_数据结构演示系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_591856
暂无简介~
格式:pdf
大小:829KB
软件:PDF阅读器
页数:32
分类:互联网
上传时间:2011-07-19
浏览量:43