DLUT-2022小学期每日进程
数据结构意义和应用
数据结构,简单来说就是研究数据的存储方式。在编写代码的过程中,我们进行数据存储的目的就是方便后期对数据的再利用,没有理由的数据存储行为是对存储空间管理的不负责。理解数据结构,可以帮助我们解决具有复杂关系的大量数据的存储问题。
不仅如此,数据结构还是算法的基石,为算法的实现提供坚实的基础。
那么数据结构有哪些组成方式呢?
线性结构线性结构是最简单的数据结构,包括数组、链表,以及它们衍生出的栈、队列、哈希表。树树是相对复杂的数据结构,其中比较有代表性的是二叉树,由它又衍生出了二叉堆之类的数据结构。是相对复杂的数据结构,因为在中会呈现出多对多的关联关系。
单链表的基本概念和操作
在开始小学期之前,笔者已经尝试利用Java实现单链表、双向链表、循环链表,虽然对使用c++实现没有涉及,但是能够更好地理解链表的运行原理,编程工具不同但是思想相同。
基本概念
链表是一种在物理上非连续、非顺序的数据结构,由若干个节点所组成。
单链表也就是单向链表,它的每一个节点包含两部分,一部分是存储数据的变量,另一部分是指向下一个节点的指针next。链表的第1个节点被称为头节点,最后1个节点称为尾节点,尾节点的next指针指向NULL。
与数组按照下标来随机寻找元素不同,对于链表的其中一个节点myNode只能根据节点myNode的next指针来寻找到该节点的下一个节点myNode依次向下查找,一级一级单向传递。
基本操作
以解决约瑟夫问题来举例
初始化链表//定义节点classnode{public:intdata;node*next;//下一个节点};//定义链表classlist{public:intsize;node*head;//头节点地址};//初始化list*InitializeList{list*List=newlist;List->size=0;List->head=newnode;List->head->data=0;List->head->next=List->head;returnList;}插入数据和删除数据//插入数据voidInsertList{node*newNode=newnode;newNode->data=num;newNode->next=NULL;//当前节点node*currentNode=List->head;for{currentNode=currentNode->next;}newNode->next=currentNode->next;currentNode->next=newNode;List->size++;}//删除数据,如果成功删除返回true,空链表返回falseboolDeleteList{if{return0;}else{node*currentNode=List->head->next;intposition=0;for{ifbreak;currentNode=currentNode->next;position++;}currentNode=List->head;for{currentNode=currentNode->next;}currentNode->next=currentNode->next->next;List->size--;}return1;}链表输入//输出voidPrintList{node*currentNode=List->head;for{ifcurrentNode=currentNode->next;cout<
OOP既面向对象程序设计,本质上是以建立模型体现出来的抽象思维过程和面向对象的方法,其基本原则是计算机程序由单个能起到子程序作用的单元或对象组合而成。
OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性,核心概念是类和对象。
OOP=对象+类+继承+多态+消息
面向对象的三大特征是:封装、继承和多态。
STL译为标准模板库或者泛型库,包含有大量的模板类和模板函数,是C++提供的一个基础模板的集合,用于高效完成各种功能。
从根本上说,STL是一些容器、算法和其他一些组件的集合,所有容器和算法都是总结了几十年来算法和数据结构的研究成果,汇集了许多计算机专家学者经验的基础上实现的,STL基本上达到了各种存储方法和相关算法的高度优化。
STL六大部件:容器、分配器、算法、迭代器、适配器、仿函数。
常用STL
在C++标准中,STL被组织为以下的头文件:algorithm/deque/functional/iterator/list/map/memory/numeric/queue/set/stack/utility/vector
pair表示一个二元组或元素对,并提供按照字典序对元素进行大小比较。在中定义了pair的六个比较运算符:<、>、<=、>=、==、!=,先比较first,再比较second,也可以通过重载改变比较逻辑。vector向量容器模板类,以连续数组的方式存储元素序列,可以看做是以顺序结构实现的线性表,是动态数组的理想选择,需要两个模板参数,第一个是存储元素的数据类型,第二个是参数存储分配器的类型。#include
形用户界面框架
形用户界面即GUI,C++常用的GUI开发框架有以下几个:
QTQT是跨平台C++形用户界面应用程序开发框架,目前使用广泛。MFCWindows下的GUI库,使用比较广泛。wxWidgetswxWidgets应用于Windows、Linux、MacOS等平台。gtkmmgtkmm是流行的形界面库GTK+的官方C++接口。其他imguiduilibxcguiGuiLitesoui
QT运行机制:
#include "widget.h"
#include <QLabel>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *hello = new QLabel("Hello world!");
hello->show();
return a.exec();
}
运行结果如下
Qt基础窗口、对话框
Qt常用组件
可视化UI设计——布局管理
Qt提供的常用布局:QHBoxLayout:按水平方向从左到右布局QVBoxLayout:按竖直方向从上到下布局QGridLayout:在一个网格中进行布局,类似于HTML的table利用widget做布局:利用控件里的Containers-widget做布局,在widget中的控件可以进行水平、垂直、栅格布局等操作,灵活性很强。
常用组件
按钮类——ButtonsButtons功能PushButton按钮ToolButton工具按钮RadioButton单选按钮CheckButton复选框CommandLinkButton命令链接按钮DialogButtonBox对话框按钮盒输入部件类——InputWidgetsInputWidgets功能ComboBox组合框FontComboBox字体组合框LineEdit行编辑框TextEdit文本编辑框PlainTextEdit纯文本编辑框SpinBox数字显示框DoubleSpinBox数字显示框TimeEdit时间编辑DataEdit日期编辑Data/TimeEdit日期/时间编辑现实控件类——DisplayWidgetsDisplayWidgets功能Label标签TextBrowser文本浏览器GraphicsView形视CalendarWidget日历LCDNumber液晶数字ProgressBar进度条空间间隔类——SpacersSpacers功能HorizontalSpacer水平间隔VerticalSpacer垂直间隔布局管理类——LayoutsLayouts功能VerticalLayout垂直布局HorizontalLayout水平布局GridLayout网格布局FormLayout表单布局容器类——ContainersContainers功能GroupBox组框ScrollArea滚动区域ToolBox工具箱TabWidget标签部件StackedWidget堆叠部件Frame框架Widget小部件DockWidget停靠窗体部件项目识类——ItemViewsItemViews功能Listview列表视TreeView树形视TableView表格式视ColumnView列视UndoView撤销视项目控件类——ItemWidgetsItemWidgets功能ListWidget列表控件TreeWidget树形控件TableWidget表格控件
软件工程
基本流程
需求分析阶段对解决的问题进行详细的分析,得出问题的需求,包括需要输入什么数据,要得到什么结果,最后输出什么,软件需求包括功能需求、非功能需求、设计约束。设计阶段从工程管理角度看,软件设计可分为系统设计、概要设计和详细设计。系统设计是把需求转化为软件系统最重要的环节,系统设计的优劣在根本上决定了软件系统的质量。系统设计主要包括软件体系结构设计,确定系统由那些模块组成以及各个模块之间的关系和资源分配。概要设计以模块为单位,主要是构建模块的基本层次结构、数据结构、算法设计、模块的整体流程设计、模块间的接口设计等。概要设计用于指导详细设计,为详细设计提供依据。详细设计是对概要设计的细化,对于概要设计中本模块内部定性设计的内容进一步量化。指导编码是编码的一局,详细设计的粒度应当达到让编码者看到设计书就知道代码如何编写的程度。广义上设计阶段还包含开发环境选定和开发平台选定。编码和调试阶段编码和调试阶段需要完成的工作包括代码编制、编译和链接、调试等。软件测试阶段测试是软件开发过程中的一个综合过程,一般软件开发过程中的测试工作要占整个开发工作量的一半以上。原理上软件开发测试所采用的方法为:白盒测试、黑盒测试、路径测试、覆盖测试等不同方法。
可分为系统设计、概要设计和详细设计。
系统设计是把需求转化为软件系统最重要的环节,系统设计的优劣在根本上决定了软件系统的质量。系统设计主要包括软件体系结构设计,确定系统由那些模块组成以及各个模块之间的关系和资源分配。概要设计以模块为单位,主要是构建模块的基本层次结构、数据结构、算法设计、模块的整体流程设计、模块间的接口设计等。概要设计用于指导详细设计,为详细设计提供依据。详细设计是对概要设计的细化,对于概要设计中本模块内部定性设计的内容进一步量化。指导编码是编码的一局,详细设计的粒度应当达到让编码者看到设计书就知道代码如何编写的程度。
广义上设计阶段还包含开发环境选定和开发平台选定。
编码和调试阶段编码和调试阶段需要完成的工作包括代码编制、编译和链接、调试等。软件测试阶段测试是软件开发过程中的一个综合过程,一般软件开发过程中的测试工作要占整个开发工作量的一半以上。原理上软件开发测试所采用的方法为:白盒测试、黑盒测试、路径测试、覆盖测试等不同方法。
文章为作者独立观点,不代表股票自动交易程序化数据接口观点
湍流2023-10-27
没办法,做股票的价投很多都被打傻了吧,倒是有一些价头去港股做的风生水起。口号:价值投资去港股!