静安企业网站建设,wordpress 4.6.1,酒店预定网站建设方案,网站改版索引量下降2.2.1线性表的顺序表示和实现------顺序映像
【顺序存储】在【查找时】的时间复杂度为【O(1)】#xff0c;因为它的地址是连续的#xff0c;只要知道首元素的地址#xff0c;根据下标可以很快找到指定位置的元素 【插入和删除】操作由于可能要在插入前或删除后对元素进行移…2.2.1线性表的顺序表示和实现------顺序映像
【顺序存储】在【查找时】的时间复杂度为【O(1)】因为它的地址是连续的只要知道首元素的地址根据下标可以很快找到指定位置的元素 【插入和删除】操作由于可能要在插入前或删除后对元素进行移动所以顺序存储的时间复杂度为【O(n)】。
1初始化操作 思想构造一个空表 设置表起始位置、表长及可用空间
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10
typedef struct
{
ElemType *elem; //定义个地址变量使其后面能指向线性表占用的数组空间
int length; // 线性表的长度
int listsize; // 当前分配的存储容量
}SqList;//初始化操作
Status InitList_Sq(SqList L) //初始化
{ //构造一个空表
L.elem(ElemType)malloc(LIST_INIT_SIZE*size of(ElemType));
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length0; //空表长度为0
L.listsizeLIST_INIT_SIZE; //初始存储容量
return OK;}
2.2.3顺序表的插入
2顺序插入操作
目的在线性表L第i个元素前插入一个元素e
【基本思想 1判断i是否在允许范围 2存储空间是否已满 3将第i个元素和后面的所有元素向后移动 4新元素写在空出的第i个位置 5线性表长度加1
【注意】 长度为n的顺序表第i个位置插入移动n-i1个元素 Status ListInsert_Sq(SqListL,int i,ElemType e){if(i1||i1.lenth1)
return ERROR; //插入位置不合法if(L.lengthL.listsize)
{} //判断空间足够q(L.elem[i-1]); //q指向插入位置for(p(L.elem[L.elem-1]);p-q;--q)
*(p1)*p;
*qe;
L.length;
return OK;
}
2.2.4顺序表的删除和插入
【基本思路 1判断i是否在允许范围 2将线性表的第i个元素给e 3将第i个元素和后面的所有元素向前移动一个位置 4线性表长度减1 Status ListDelete_Sq(SqListL,int i,ElemType e){//删除第i个元素并用e返回值if(i1||i1.lenth1)
return ERROR; //删除位置不合法p(L.elem[i-1]); //q指向插入位置
e*p;
qL.elemL.length-1; //表尾元素位置
for(p;pq;p)
*(p-1)*p; //p-1指向p--L.length;
return OK;
}
【图】平均移动次数
【查找操作】11:42
int LocateElem_Sq(SqList,ElseType e)
{
//查询第一个 满足条件的元素若存在返回位序否则返回0
int i;
i1;
while (iL.lengthL.elem[i-1]!e)
i;
if(iL.length)
return i;
else return 0;
}// locateElem_SqiL.lengthL.elem[i-1]!e
iL.length
【顺序结构优缺点14:15 【优点 逻辑相邻物理相邻 可随机存取一元素 存储空间使用紧凑 【缺点 插入删除需要移动大量元素 预先分配空间需按最大空间分配利用不充分表难以扩充
【】线性表的合并问题 【图例1】 基本思路 1初始化Lc为空表 2分别从La和Lb取得当前元素ai和bi 3)若aibj则将ai插入到Lc中否则 bj插入到Lc中
代码 Viod MergeList(SqList La,SqList lb,SqList Lc)
{
PaLa,elem;
PbLb.elem;
Lc.listsizeLc.lengthLa,elemLb.elem;
PcLc.elem(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
if(!Lc.elem)
exit(overflow);
Pa_lastLa.elemLa.length-1;
Pb_lastLb.elemLb.length-1;
while(papa_lastpbpb_last)
{
if(*pa*pb)
*pc*pa;
else
*pa*pb;
}
while(papa_last)
*pa*pa;
while (pbpb_last)
*pc*pb;
}