数据结构(C语言版) 线性表 算法设计Demo17
Posted 华辰永利
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 线性表 算法设计Demo17相关的知识,希望对你有一定的参考价值。
已知指针La和Lb分别是两个带头结点单链表的头指针,下列算法是将表La的第i个元素起的len个元素删除并插入到表Lb的第j(j>=1)个元素之前,试问此算法是否正确?若有错请改正。
设i>=1,len>=1,i+ListLength(La),1<=j<=ListLength(Lb)。
void insertsublist(LNode * La,LNode * Lb,int i,int j,int len)
pre=La;
pa=La->next;
k=1;
while(k<1)
p=p->next;
k=k+1;
s=p;
while(k<len)
s=s->next;
k=k+1;
pre->next=s->next;
q=Lb,k=0;
while(k<j)
q=q->next;
k=k+1;
q->next=p;
s->next=q->next;
代码中存在错误。
(1)为删除La的第i个元素起的len个元素,需要保存第i个元素结点前驱结点的指针。
(2)k在3个循环中的作用是类似的,都是用于累计本次循环中已扫描的元素结点的个数,所以进入第二个循环之前,k要重新赋值,即k=1;
(3)为将子表插在表Lb的第j(j>=1)个元素之前,需要修改Lb的第j-1个元素结点的指针,故第三个循环的循环条件为k<j-1;
(4)将子表插入到表Lb中,修改指针的顺序有误。
void insertsub(LNode * La,LNode * Lb,int i,int j,int len)
pre=La; // pre指向la的头结点
p=La->next; // p指向La头结点后的第一个元素
k=1; // 遍历到La的第i-1个元素,pre指向第i-1个元素,p指向La第i个元素
while(k<i)
pre=p;
p=p->next;
k=k+1;
s=p; // s指向La的第i个元素
k=1;
while(k<len)
s=s->next;
k=k+1;
pre->next=s->next; // 删除从La的第i个元素起的后len个
q=Lb; // q指向Lb的头结点
k=0;
while(k<j-1) // 令q指向Lb的第j-1个元素
q=q->next;
k=k+1;
s->next=q->next; // 将La的第i+len-1个元素插入Lb的第j个元素之前
q->next=p;
以上是关于数据结构(C语言版) 线性表 算法设计Demo17的主要内容,如果未能解决你的问题,请参考以下文章