算法与数据结构——线性表

  算法的五个基本特性:输入(0-多个输入)、输出(1-多个输出)、有穷性(算法程序的运行时间是有限的)、确定性(算法中的每个程序步骤都必须有明确的定义,不允许有模棱两可的多义性)、可行性(针对实际问题而设计的算法,执行后能得到满意的结果)。算法设计的要求:可读性(便于阅读)、健壮性(一个算法对不合理数据的反应能力和处理能力)、时间效率高和存储量低。

  时间复杂度O(f(n))=T(n)(语句总的执行次数)的推导:用常熟1取代运行时间中的所有加法常数、在修改后的函数f(n)(增长率与运行时间函数的增长率相同)中只保留最高阶项、如果最高阶项不是1则去除与这个项相乘的常数,从而得到大O阶。空间复杂度S(n)=O(f(n)),n为问题规模,f(n)为语句关于n所占存储空间的函数。复杂度(时间复杂度)。

  线性表的自定义函数格式:InitList(*L):初始化操作,建立一个空的线性表L。ListEmpty(L):判断线性表是否为空表,若线性表为空表返回ture,否则返回false。ClearList(*L):将线性表清空。GetElem(L,I,*e):将线性表L中的第i个位置元素值返回给e。LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在线性表中的序号(线性表的序号从1开始)表示成功,否则返回0表示失败。ListInsert(*L,i,e):在线性表的第i个位置插入元素e。ListDelete(*L,i,*e):删除线性表第i个位置元素,并用e返回其值。ListLength(L):返回线性表L的元素个数。

  顺序存储结构线性表的地址计算方法:LOC(ai)=LOC(a1)+(i-1)*C(C为元素的存储单元即字节),通过这个公式可以计算出线性表任意位置的地址,存储时间性能为O(1),称之为随机会存储结构。

  顺序存储结构线性表的优点:可以快速的存取表中任意位置的元素、无需增加额外的存储空间,缺点:插入和删除操作需要移动大量的元素、当线性表长度变化过大时难以确定存储空间的容量、容易造成存储空间的碎片化。

  链式存储结构线性表:把存储数据元素信息的域称为数据域,把存储直接后继位置的域为指针域,指针域中存储的信息称为指针或链,由这两部位组成的数据元素称为存储映像,称为结点。单链表每个结点中只2包含一个指针域。头指针是链表指向第一个f结点的指针,头结点放在第一个元素的结点之前,数据域一般无意义(可用来存放链表长度),头结点不一定是链表的必要元素。对于插入或删除越频繁的操作,单链表的效率优势就越是明显。

  静态链表:用数组构成的链表,第一个元素和最后一个元素的data不存放数据。将未使用的数据元素称为备用链表。数组的第一个元素(含有完整信息的结点)的游标存放备用链表的第一个结点的下标。数组的最后一个元素的游标存放第一个有数值的元素的下标。对静态链表的操作:改游标。静态链表的优点:在插入和删除操作时,只需要修改游标,不需要移动元素。缺点:没有解决连续存储分配(数组)带来的表长难以确定的问题、失去了顺序存储结构随机存取的特性。

  判断链表有没有环有2种方法:判断步数相同法:一个指针一直下移另一个指针不断重新从头开始下移到相同位置判断步数是否相同。指针快慢法:一个指针速度正常另一个速度是它的2倍,判断位置是否相同。

 

posted @ 2021-07-19 12:48  smilecomzyb  阅读(288)  评论(4编辑  收藏  举报