知识大全 数据结构与算法线性表复习习题3
Posted 结点
篇首语:学者有自立之志,当拔出流俗,不可泛泛与世浮沉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构与算法线性表复习习题3相关的知识,希望对你有一定的参考价值。
指出以下算法中的错误和低效之处 并将它改写为一个既正确又高效的算法
Status DeleteK(SqList &a int i int k)
//本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素
if(i< ||k< ||i+k>a length) return INFEASIBLE;//参数不合法
else
for(count= ;count<k;count++)
//删除第一个元素
for(j=a length;j>=i+ ;j ) a elem[j i]=a elem[j];
a length ;
return OK;
解
Status DeleteK(SqList &a int i int k)
//从顺序存储结构的线性表a中删除第i个元素起的k个元素
//注意i的编号从 开始
int j;
if(i< ||i>a length ||k< ||k>a length i) return INFEASIBLE;
for(j= ;j<=k;j++)
a elem[j+i]=a elem[j+i+k];
a length=a length k;
return OK;
设顺序表va中的数据元素递增有序 试写一算法 将x插入到顺序表的适当位置上 以保持该表的有序性
解
Status InsertOrderList(SqList &va ElemType x)
//在非递减的顺序表va中插入元素x并使其仍成为顺序表的算法
int i;
if(va length==va listsize)return(OVERFLOW);
for(i=va length;i> x<va elem[i ];i )
va elem[i]=va elem[i ];
va elem[i]=x;
va length++;
return OK;
试写一算法在带头结点的单链表结构上实现线性表操作Locate(L x);
解
int LocateElem_L(LinkList &L ElemType x)
int i= ;
LinkList p=L;
while(p&&p >data!=x)
p=p >next;
i++;
if(!p) return ;
else return i;
试写一算法在带头结点的单链表结构上实现线性表操作Length(L)
解
//返回单链表的长度
int ListLength_L(LinkList &L)
int i= ;
LinkList p=L;
if(p) p=p next;
while(p)
p=p >next;
i++;
return i;
已知指针ha和hb分别指向两个单链表的头结点 并且已知两个链表的长度分别为m和n 试写一算法将这两个链表连接在一起 假设指针hc指向连接后的链表的头结点 并要求算法以尽可能短的时间完成连接运算 请分析你的算法的时间复杂度
解
void MergeList_L(LinkList &ha LinkList &hb LinkList &hc)
LinkList pa pb;
pa=ha;
pb=hb;
while(pa >next&&pb >next)
pa=pa >next;
pb=pb >next;
if(!pa >next)
hc=hb;
while(pb >next) pb=pb >next;
pb >next=ha >next;
else
hc=ha;
while(pa >next) pa=pa >next;
pa >next=hb >next;
cha138/Article/program/sjjg/201311/23409
相关参考