0数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。(程序设计=数据结构+算法)
数据结构分为逻辑结构(集合结构,线性结构,树形结构,图形结构)和物理结构(数据元素的存储结构形式有两种:顺序存储和链式存储。
算法:是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作,算法的特性(输入,输出,有穷性,确定性,可行性)
算法设计的要求:正确性(算法程序没有语法错误,算法程序对于合法输入能够产生满足要求的输出,算法程序对于非法输入能够产生满足规格的说明,算法程序对于故意刁难的测试输入都有满足要求输出结果。)可读性(为了便于阅读,理解和交流)时间效率高和存储量低
算法效率的度量方法,(我们在分析一个算法的运行时间时,重要的是把基本操作的数量和输入模式关联起来
算法时间复杂度:执行次数==时间,只看最高项的系数,可以忽略其常数和与它相乘的数(3n的3次方加3n加一记为n的三次方,单个循环是线性阶,嵌套循环是平方阶
循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。
函数调用的时间复杂度分析。常用的时间复杂度所耗费的时间从小到大依次是0(1)<0(logn)<(n)<0(nlogn)<0(n的平方)<0(n的三次方)<0(2的n次方)<0(n!)<0(n的n次方)
用时间复杂度来指运行时间的需求,用空间复杂度指空间需求。当让我们求复杂度时一般是指时间复杂度
线性表的定义(由;零个或多个数据元素组成的有限序列。有且仅有一个前驱元素和后继元素一对一)
抽象数据类型ADT(数据类型,是指一组性质相同的值的集合及定义在此集合上的总称,抽象:是指抽取出食物具有的可比性的本质,它要求抽出问题的特性而忽略非本质的细节,是对具体事物的一个概括,抽象是一种思考问题的方式,它隐藏了繁杂的细节,抽象数据类型的定义仅取决与它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,
单链表结构与顺序存储结构的优缺点。
存储分配方式:顺序存储结构用一段连续的存储单元依次存储线性表的数据元素,单链表采取链式存储结构,用一组任意的存储单元存放线性表的元素,
时间性能:查找(顺序存储结构0(1),单链表0(n),插入和删除顺序存储结构需要平均移动表长一半的元素,时间为0(n),单链表在计算出某位置的指针后,插入和删除的时间仅为0(1)
空间性能:顺序存储结构需要预分配存储空间,分大了容易造成空间浪费,分小了容易发生溢出,单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制
综上所述:若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构,若需要频繁插入和删除时,采用单链表结构,
静态链表:用数组描述出来的链表,1,把数组的第一个和最后一个元素做特殊处理,他们的date不存放数据,2,通常把未使用的数组元素称为备用链表,3,数组的第一个元素,即下表为0的那个元素的cur就存放备用链表的第一个结点的下标,4,数组的最后一个元素,即下标为MAXSIZE-1的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点作用。