知识大全 数据结构与算法线性表复习习题4
Posted 结点
篇首语:少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构与算法线性表复习习题4相关的知识,希望对你有一定的参考价值。
已知指针la和lb分别指向两个无头结点单链表中的首元结点 下列算法是从表la中删除自第i个元素起共len个元素后 将它们插入到表lb中第i个元素之前 试问此算法是否正确?若有错 请改正之
Status DeleteAndInsertSub(LinkedList la LinkedList lb int i int j int len)
if(i< ||j< ||len< ) return INFEASIBLE;
p=la;k= ;
while(k<i)p=p >next;k++;
q=p;
while(k<=len)q=q >next;k++;
s=lb; k= ;
while(k<j)s=s >next;k++;
s >next=p; q >next=s >next;
return OK;
解
Status DeleteAndInsertSub(LinkList &la LinkList &lb int i int j int len)
LinkList p q s prev=NULL;
int k= ;
if(i< ||j< ||len< ) return INFEASIBLE;
// 在la表中查找第i个结点
p=la;
while(p&&k<i)
prev=p;
p=p >next;
k++;
if(!p)return INFEASIBLE;
// 在la表中查找第i+len 个结点
q=p;k= ;
while(q&&k<len)
q=p >next;
k++;
if(!q)return INFEASIBLE;
// 完成删除 注意 i= 的情况需要特殊处理
if(!prev) la=q >next;
else prev >next=q >next;
// 将从la中删除的结点插入到lb中
if(j= )
q >next=lb;
lb=p;
else
s=lb;k= ;
while(s&&k<j )
s=s >next;
k++;
if(!s)return INFEASIBLE;
q >next=s >next;
s >next=p; //完成插入
return OK;
已知线性表中的元素以值递增有序排列 并以单链表作存储结构 试写一高效的算法 删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素) 同时释放被删结点空间 并分析你的算法的时间复杂度(注意 mink和maxk是给定的两个参变量 它们的值可以和表中的元素相同 也可以不同)
解
Status ListDelete_L(LinkList &L ElemType mink ElemType maxk)
LinkList p q prev=NULL;
if(mink>maxk)return ERROR;
p=L;
prev=p;
p=p >next;
while(p&&p >data<maxk)
if(p >data<=mink)
prev=p;
p=p >next;
else
prev >next=p >next;
q=p;
p=p >next;
free(q);
return OK;
同 题条件 试写一高效的算法 删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同) 同时释放被删结点空间 并分析你的算法的时间复杂度
解
void ListDelete_LSameNode(LinkList &L)
LinkList p q prev;
p=L;
prev=p;
p=p >next;
while(p)
prev=p;
p=p >next;
if(p&&p >data==prev >data)
prev >next=p >next;
q=p;
p=p >next;
free(q);
cha138/Article/program/sjjg/201311/23408
相关参考