数据结构课程设计实习报告

2024-06-12 21:08

本文主要是介绍数据结构课程设计实习报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.设计目的
  1. 复习MFC的相关操作。

  2. 巩固《数据结构》的基础知识并实现:List, Stack. Sort

  3. 熟练调用系统类库,加深对软件本质的理解。

  4. 理解多态,宏的意义,并运用。

二.设计任务

根据《数据结构》课程设计的结构体系,基于MFCSDI应用程序。利用树状图实现各级菜单,并实现对应的消息响应。线性表,一元多项式相加,栈的应用,排序都基于对话框。

三.程序结构

1.程序结构图:


2.类图:


3.类关系图


4.FileViewTreeView

      FileView显示数据,TreeView处理消息响应;有代表性的代码如下:

voidCFileView::FillFileView()

{

   HTREEITEM hRoot = m_wndFileView.InsertItem(_T("数据结构"),0, 0);

   m_wndFileView.SetItemState(hRoot,TVIS_BOLD,TVIS_BOLD);

 

   HTREEITEM hSrc = m_wndFileView.InsertItem(_T("绪论"),0, 0, hRoot);

 

   m_wndFileView.InsertItem(_T("什么是数据结构"),2,2, hSrc);

   m_wndFileView.InsertItem(_T("基本概念和术语"),2, 2, hSrc);

   m_wndFileView.InsertItem(_T("抽象数据类型的表示和实现"),2,2 ,hSrc);

   m_wndFileView.InsertItem(_T("算法和算法分析"),2, 2, hSrc);

 

   m_wndFileView.Expand(hRoot,TVE_EXPAND);

   m_wndFileView.Expand(hSrc,TVE_EXPAND);

……

}

voidCViewTree::OnNMClick(NMHDR *pNMHDR,LRESULT *pResult)

   {

   DWORD dwpos = GetMessagePos();

   TVHITTESTINFO ht = { 0 };

   ht.pt.x =GET_X_LPARAM(dwpos);

   ht.pt.y =GET_Y_LPARAM(dwpos);

   ::MapWindowPoints(HWND_DESKTOP,pNMHDR->hwndFrom,&ht.pt, 1);

   TreeView_HitTest(pNMHDR->hwndFrom, &ht);

   CString sel =this->GetItemText(ht.hItem);

#defineJUDGE(x)if(sel==x)

   JUDGE(_T("图的定义和术语"))

       AfxMessageBox(_T("图:是一种较线性表和树更为复杂的数据结构。结点直接的关系可以是任意的,图中任意两个数据元素之间都可能相关。\n顶点:数据元素。\n弧:两个顶点之间的关系。\n弧头:弧的终端点。\n弧尾:弧的初始点。\n有向图:有指向的图。\n无向图:没有指向的图。\n连通图:任意两个顶点都连通。"));

   JUDGE(_T("线性表的顺序表示和实现"))

       {

       CListDLg*m_listDlg =newCListDLg();

       m_listDlg->DoModal();

       }

   JUDGE(_T("线性表的链式表示和实现"))

       {

       CListDLg*m_SqListDlg =newCListDLg();

       m_SqListDlg->DoModal();

       }

   JUDGE(_T("一元多项式的表示及相加"))

       {

       CPolynomialDlg*m_pPolynomialDlg =newCPolynomialDlg();

       m_pPolynomialDlg->DoModal();

 

       }

   JUDGE(_T("栈的应用举例"))

       {

       CUSESTACK*m_stackDlg =newCUSESTACK();

       m_stackDlg->DoModal();

JUDGE(_T("插入排序"))

       {

       CSortDlg*sortDlg =newCSortDlg();

       sortDlg->DoModal();

       }

……

}

5.ListDlg

voidCListDLg::OnBnClickedButtonCreate()

   {

   UpdateData(TRUE);

   GetDlgItemTextW(IDC_EDIT_ITEMOFCREATE, m_itemOfCreate);

   for (int i = 0; i < m_itemOfCreate.GetLength(); i=i+2)

       {

       CStringstr(m_itemOfCreate.GetAt(i));

       List.push_back(_wtoi(str));

       }

 

   //length

这篇关于数据结构课程设计实习报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055343

相关文章

【数据结构】线性表:顺序表

文章目录 1. 线性表2. 顺序表2.1 概念及结构2.2 接口实现2.3 顺序表的问题及思考 1. 线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较到最后一组相邻元素,这一步结束最后一个元素必然是参与比较的元素中最大的元素;按照大的居右原则,重新从左到后比较,前一轮中得到的最后一个元素不参4与比较,得出新一轮的最大元素;按照上述规则,每一轮结

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2  5. 算法设计 5.1 正确性 5.2 可读性(高内聚、低耦合) 5.3 健壮性 5.4 高效率(时间复杂度)时间复杂度越低,效率越高, 5.5 低储存(空间复杂度)空间复杂度越低,存储空间越少 6.排序算法 6.1 冒

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写法 非递归写法 6、中序遍历 递归写法 非递归写法 7、后序遍历 递归写法 非递归写法 8、输出根节点到所有叶

Java数据结构4-链表

1. ArrayList的缺陷 由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。因此:java集合中又引入了LinkedList,即链表结构。 2. 链表 2.1 链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据元素

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递

芯片后端之 PT 使用 report_timing 产生报告如何阅读

今天,就PT常用的命令,做一个介绍,希望对大家以后的工作,起到帮助作用。 在PrimeTime中,使用report_timing -delay max命令生成此报告。switch -delay max表示定时报告用于设置(这是默认值)。 首先,我们整体看一下通过report_timing 运行之后,报告产生的整体样式。 pt_shell> report_timing -from start_

数据结构和算法(1) ---- Queue 的原理和实现

Queue 的定义和结构 队列(Queue) 是只允许在一端进行插入,在另一端进行删除的线性表 队列是一种先进先出(First In First Out)的线性表,简称 FIFO(First IN First OUT), 允许插入的一端称为队尾, 允许删除的一端称为队列头 队列的基本结构如下图所示: Queue 的抽象数据类型 队列也有线性表的各种操作,不同的是插入元素只能在队列尾,删除