二、基本运算
INITIATE(L) 初始化操作 设定一个空的线性表L
LENGTH(L) 求长度函数 函数为线性表L中的数据元素个数
GET(L,i) 取元素函数
PRIOR(L,elm) 求前驱函数 elm为L中的一个数据元素,若它的位序大于1,则函数为elm前驱,否则为NULL
NEXT(L,elm) 求后继函数 若elm的位序小于表长,则函数值为elm的后继,否则为NULL
LOCATE(L,x) 定位函数 给定值x,若x不在表中 则返回0,否则,返回x在表中第一次出现的位序
INSERTE(L,i,b) 前插操作 在第i个元素插入新元素b,i的取值范围为1<=i<=n+1;i=n+i表示在表位插入,n为表长
DELETE(L,i) 删除操作 删除线性表L中的第i个元素,1<=i<=n
EMPTY(L) 判空表函数 若L为空表 则返回布尔值"true",否则返回"false"
CLEAR(L)表置空操作 将L置为空表
例子1 求两个集合的并,即A=A U B
分析:设A、B分别由两个线性表LA和LB表示,要求将LB中存在而LA中不存在的DE插入到表LA中。
算法思想:1、依次从LB中取出一个DE;=>GET(LB,i) for
2、判在LA中的是否存在;=>LOCATE(LB,x)
3、若不存在,则插入到LA中;=>INSERTE(LA,)
类JAVA语言描述
void union(LA LB){
n = LENGTH(LA); //求线性表LA的长度
for(i=0;i<=LB.LENGTH;i++){
x=GET(LB,i); //取出LB中第i个元素
k=LOCATE(LA,x);//与LA中元素一一比较
if(k=0){
INSERTE(LA,n+1,x); //插入到末尾
n=n+1; //表长加1
}
}
}
例2 归并两个有序的线性表LA和LB为一个新的线性表LC
算法思想
1、构建一张空LC表,设定变量i,j,初始值1,分别指向LA,LC中第一个元素DE,
k表示LC的长度 初始值0
2、当i<=LA.LENGTH AND j<=LB.LENGTH
判断 i<=j所指向的元素 将i插入LC 的k+1前 k,i值加1
否则j 插入到k+1前 k,j值加1
3、重复2
INITIATE(L) 初始化操作 设定一个空的线性表L
LENGTH(L) 求长度函数 函数为线性表L中的数据元素个数
GET(L,i) 取元素函数
PRIOR(L,elm) 求前驱函数 elm为L中的一个数据元素,若它的位序大于1,则函数为elm前驱,否则为NULL
NEXT(L,elm) 求后继函数 若elm的位序小于表长,则函数值为elm的后继,否则为NULL
LOCATE(L,x) 定位函数 给定值x,若x不在表中 则返回0,否则,返回x在表中第一次出现的位序
INSERTE(L,i,b) 前插操作 在第i个元素插入新元素b,i的取值范围为1<=i<=n+1;i=n+i表示在表位插入,n为表长
DELETE(L,i) 删除操作 删除线性表L中的第i个元素,1<=i<=n
EMPTY(L) 判空表函数 若L为空表 则返回布尔值"true",否则返回"false"
CLEAR(L)表置空操作 将L置为空表
例子1 求两个集合的并,即A=A U B
分析:设A、B分别由两个线性表LA和LB表示,要求将LB中存在而LA中不存在的DE插入到表LA中。
算法思想:1、依次从LB中取出一个DE;=>GET(LB,i) for
2、判在LA中的是否存在;=>LOCATE(LB,x)
3、若不存在,则插入到LA中;=>INSERTE(LA,)
类JAVA语言描述
void union(LA LB){
n = LENGTH(LA); //求线性表LA的长度
for(i=0;i<=LB.LENGTH;i++){
x=GET(LB,i); //取出LB中第i个元素
k=LOCATE(LA,x);//与LA中元素一一比较
if(k=0){
INSERTE(LA,n+1,x); //插入到末尾
n=n+1; //表长加1
}
}
}
例2 归并两个有序的线性表LA和LB为一个新的线性表LC
算法思想
1、构建一张空LC表,设定变量i,j,初始值1,分别指向LA,LC中第一个元素DE,
k表示LC的长度 初始值0
2、当i<=LA.LENGTH AND j<=LB.LENGTH
判断 i<=j所指向的元素 将i插入LC 的k+1前 k,i值加1
否则j 插入到k+1前 k,j值加1
3、重复2
4、最后将未插入的元素插入到LC中
算法复杂度 O(LENGTH(LA)+LENGTH(LB))