数据结构

位置:IT落伍者 >> 数据结构 >> 浏览文章

数据结构与算法线性表复习习题【6】[1]


发布日期:2022年06月01日
 
数据结构与算法线性表复习习题【6】[1]

已知AB和C为三个递增有序的线性表现要求对A表作如下操作删去那些既在B表中出现又在C表中出现的元素试对顺序表编写实现上述操作的算法并分析你的算法的时间复杂度(注意题中没有特别指明同一表中的元素值各不相同)

// 在A中删除既在B中出现又在C中出现的元素结果放在D中

Status ListUnion_Sq(SqList &DSqList &ASqList &BSqList &C)

{

SqList Temp;

InitList_Sq(Temp);

ListCross_L(BCTemp);

ListMinus_L(ATempD);

}

要求同试对单链表编写算法请释放A表中的无用结点空间

// 在A中删除既在B中出现又在C中出现的元素并释放BC

Status ListUnion_L(LinkList &ALinkList &BLinkList &C)

{

ListCross_L(BC);

ListMinus_L(AB);

}

// 求集合AB结果放在A表中并删除B表

Status ListMinus_L(LinkList &ALinkList &B)

{

LinkList papbqaqbpt;

pa=A;

pb=B;

qa=pa;// 保存pa的前驱指针

qb=pb;// 保存pb的前驱指针

pa=pa>next;

pb=pb>next;

while(pa&&pb){

if(pb>data<pa>data){

pt=pb;

pb=pb>next;

qb>next=pb;

free(pt);

}

else

if(pb>data>pa>data){

qa=pa;

pa=pa>next;

}

else{

pt=pa;

pa=pa>next;

qa>next=pa;

free(pt);

}

}

while(pb){

pt=pb;

pb=pb>next;

qb>next=pb;

free(pt);

}

pb=B;

free(pb);

return OK;

}

假设某个单向循环链表的长度大于且表中既无头结点也无头指针已知s为指向链表中某个结点的指针试编写算法在链表中删除指针s所指结点的前驱结点

// 在单循环链表S中删除S的前驱结点

Status ListDelete_CL(LinkList &S)

{

LinkList pq;

if(S==S>next)return ERROR;

q=S;

p=S>next;

while(p>next!=S){

q=p;

p=p>next;

}

q>next=p>next;

free(p);

return OK;

}

[] [] []

               

上一篇:数据结构与算法线性表复习习题【6】[2]

下一篇:2013年1月份全国高等教育自学考试数据结构试题