算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列。并且每条指令表示一个或多个操作

算法具有5个基本特征:输入,输出,有穷性,确定性和可行性

设计算法应该尽量满足时间效率高和存储量低的需求

算法时间复杂度的定义

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度,其中f(n)是问题规模n的某个函数。

线性表:零个或多个数据元素的有限序列

若将线性表记为(a1,a2,a3,a4,........an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i = 1,2,3....n-1时ai有且仅有一个直接后继,当i = 2,3....n时,ai有且仅有一个直接前驱,所以线性表的个数n定义为线性表的长度,当n等于0时,为空表

在较复杂的线性表中,一个数据元素可以由若干个数据项组成。

线性表的抽象数据类型定义如下:

ADT 线性表(List)

Data 

  线性表的数据对象集合为{a1,a2,a3,......an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且仅有一个直接前驱元素,除了最后一个元素an外,每一个元素有且仅有一个直接后继元素。数据元素之间的关系是一对一的关系。

Operation

  InitList(*L): 初始化操作,建立一个空的线性表L。

  ListEmpty(L):若线性表为空,返回true,否则返回false。

  Clearlist(*L): 将线性表清空。

  GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e。

  LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。

  ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。

  ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。

  ListLength(L);返回线性表L的元素个数。

endADT

将所有的在线性表Lb中但不在La中的数据元素插入到La中

void unionL(List *La,List Lb)

{

  int La_len,Lb_len,i;

  ElemType e;

  La_len = ListLength(*La);

  Lb_Len = ListLength(Lb);

  for(i=1;i<=Lb_len;i++)

  {

    GetElem(Lb,i,&e);     取Lb中第i个数据元素赋给e

    if(!LocationElem(*La,e))    La中不存在和e相同的数据元素

      ListInsert(La,++La_len,e);

  }

}

posted @ 2017-09-04 22:12  竹之轩  阅读(178)  评论(0编辑  收藏  举报