诸城网站价格,襄阳注册公司,wordpress调整文章编辑界面,交流做病理切片的网站概念
数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系#xff0c;并对这种结构定义相应的运算#xff0c;而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 1.数据#xff1a;所有能被输入到计算机中#xff0c;且能被计算机处理的符号的集合。…概念
数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系并对这种结构定义相应的运算而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 1.数据所有能被输入到计算机中且能被计算机处理的符号的集合。是计算机操作的对象的总称。 2.数据元素数据集合中的一个“个体”数据及结构中讨论的基本单位 3.数据项数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。 4.数据类型在一种程序设计语言中变量所具有的数据种类。整型、浮点型、字符型等等 5.逻辑结构数据之间的相互关系。 集合 结构中的数据元素除了同属于一种类型外别无其它关系。线性结构 数据元素之间一对一的关系树形结构 数据元素之间一对多的关系图状结构或网状结构 结构中的数据元素之间存在多对多的关系 6.物理结构/存储结构数据在计算机中的表示。物理结构是描述数据具体在内存中的存储如顺序结构、链式结构、索引结构、哈希结构等 7.在数据结构中,从逻辑上可以将其分为线性结构和非线性结构 8.数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。实现应用程序是“逻辑结构”存储的是“物理结构”。逻辑结构主要是对该结构操作的设定物理结构是描述数据具体在内存中的存储如顺序结构、链式结构、索引结构、希哈结构等。 9.顺序存储结构中线性表的逻辑顺序和物理顺序总是一致的。但在链式存储结构中线性表的逻辑顺序和物理顺序一般是不同的。 10.算法五个特性 有穷性、确定性、可行性、输入、输出 11.算法设计要求正确性、可读性、健壮性、高效率与低存储量需求。(好的算法) 12.算法的描述有伪程序、流程图、N-S结构图等。E-R图是实体联系模型不是程序的描述方式。 13.设计算法在执行时间时需要考虑算法选用的规模、问题的规模 14.时间复杂度算法的执行时间与原操作执行次数之和成正比。时间复杂度有小到大O(1)、O(logn)、O(n)、O(nlogn)、O(n2)、O(n3)。幂次时间复杂度有小到大O(2n)、O(n!)、O(nn) 15.空间复杂度若输入数据所占空间只取决于问题本身和算法无关则只需要分析除输入和程序之外的辅助变量所占额外空间。
线性表
线性表是一种典型的线性结构。头结点无前驱有一个后继尾节点无后继有一个前驱。链表只能顺序查找定位一个元素的时间为O(N)删除一个元素的时间为O(1) 1.线性表的顺序存储结构把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。是一种随机存取的存储结构。顺序存储指内存地址是一块的随机存取指访问时可以按下标随机访问存储和存取是不一样的。如果是存储则是指按顺序的如果是存取则是可以随机的可以利用元素下标进行。数组比线性表速度更快的是原地逆序、返回中间节点、选择随机节点。 便于线性表的构造和任意元素的访问插入插入新结点之后结点后移。平均时间复杂度:O(n)删除删除节点之后结点前移。平均时间复杂度:O(n) 2.线性链表用一组任意的存储单元来依次存放线性表的结点这组存储单元即可以是连续的也可以是不连续的甚至是零散分布在内存中的任意位置上的。因此链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系在存储每个结点值的同时还必须存储指示其后继结点的地址。data域是数据域用来存放结点的值。next是指针域亦称链域用来存放结点的直接后继的地址或位置。不需要事先估计存储空间大小。 单链表中每个结点的存储地址是存放在其前趋结点next域中而开始结点无前趋故应设头指针head指向开始结点。同时由于最后一个结点无后继故结点的指针域为空即NULL。头插法建表(逆序)、尾插法建表(顺序)。增加头结点的目的是算法实现上的方便但增大了内存开销。查找只能从链表的头指针出发顺链域next逐个结点往下搜索直到搜索到第i个结点为止。因此链表不是随机存取结构。插入先找到表的第i-1的存储位置然后插入。新结点先连后继再连前驱。删除首先找到ai-1的存储位置p。然后令p–next指向ai的直接后继结点即把ai从链上摘下。最后释放结点ai的空间.rp-next;p-nextr-next;delete r。判断一个单向链表中是否存在环的最佳方法是快慢指针。 静态链表用一维数组来实现线性链表这种用一维数组表示的线性链表称为静态链表。静态体现在表的容量是一定的。数组的大小链表插入与删除同前面所述的动态链表方法相同。静态链表中指针表示的是下一元素在数组中的位置。 静态链表是用数组实现的是顺序的存储结构在物理地址上是连续的而且需要预先分配大小。动态链表是用申请内存函数C是malloc,C是new动态申请内存的所以在链表的长度上没有限制。动态链表因为是动态申请内存的所以每个节点的物理地址不连续要通过指针来顺序访问。静态链表在插入、删除时也是通过修改指针域来实现的与动态链表没有什么分别 循环链表是一种头尾相接的链表。其特点是无须增加存储量仅对表的链接方式稍作改变即可使得表处理更加方便灵活。 在单链表中将终端结点的指针域NULL改为指向表头结点的或开始结点就得到了单链形式的循环链表并简单称为单循环链表。由于循环链表中没有NULL指针故涉及遍历操作时其终止条件就不再像非循环链表那样判断p或p—next是否为空而是判断它们是否等于某一指定指针如头指针或尾指针等。 双向链表:在单链表的每个结点里再增加一个指向其直接前趋的指针域prior。这样就形成的链表中有两个方向不同的链。双链表一般由头指针唯一确定的将头结点和尾结点链接起来构成循环链表并称之为双向链表。设指针p指向某一结点则双向链表结构的对称性可用下式描述p—prior—nextpp—next—prior。从两个方向搜索双链表比从一个方向搜索双链表的方差要小。插入先搞定插入节点的前驱和后继再搞定后结点的前驱最后搞定前结点的后继。在有序双向链表中定位删除一个元素的平均时间复杂度为O(n)可以直接删除当前指针所指向的节点。而不需要像单向链表中删除一个元素必须找到其前驱。因此在插入数据时单向链表和双向链表操作复杂度相同而删除数据时双向链表的性能优于单向链表