《数据结构与算法》廖明宏课后答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次作业(第2章)
4.List Combine(List &L1,List &L2)
{
LNode *ap1,*ap2,*p;
ap1=L1->next;
ap2=L2->next;
if(ap1->element
{
while(ap1-next!=NULL)
ap1=ap1->next;
ap1=L2;
return L1;
}
else
{
while(ap2->next!=NULL)
ap2=ap2->next;
ap2=L1;
return L2;
}
}
8.XSXXXSSSXXSXXSXXSSSS
15.节点只有一个链域的环形链表只能是一个单向环形链表,但为了能逆时针方向查找,可以在链表的每个节点中增加一个代表链表元素总数的整型num。该环形链表的每个节点可说明为:
struct celltype{
Elementtype element;
celltype *next;
int num;
}List;
顺时针方向查找就按照普通单向链表的查找;逆时针方向查找不是直接一步就达到,逆时针查找当前节点的下一个节点可以通过顺时针转一圈来达到,代表元素总数的整型num就决定了p=p->next(p为当前节点)所需循环的次数,最终达到逆时针查找的目的。
顺时针访问表的每个节点的算法为:
void TravelList(List la)
{
List p=la->next;
int i=0;
while(i
{
i++;
p=p->next;
}
}
18.void R(List la,elementtype x)
{
LNode* p=la->next;
LNode* q=la->next;
int n=1;
while(p-next!=NULL && p->data!=x)
{
p=p->next;
n++;
}
if(p==NULL)
{
LNode *s;
int j=0;
while(q && j { q=q->next; j++; } s->element=x; s->next=q->next; q->next=s; cout<<"已将x插在表尾。" }else{ cout<<"x在表中的序号为:"< } } 19. void cut(List L,List &L1,List &L2) { L1=new LNode,L2=new LNode; int num1=0,num2=0; LNode *p=L->next,ap1=L1,ap2=L2; while(p) { ap1->next=p; ap1=p; num1++; p=p->next; if(p) { ap2->next=p; ap2=p; num2++; p=p->next; } } ap1->next=L1; ap2->next=L2; L1->element=num1; L2->element=num2; } 22. STRING Substr(STRING &S,int m,int n) { int i=1,j=0; R=new STRING; STRING st=R; STRING *p=S->link; int len=Len(S); if(n>len||n<=0) return NULL; while(p&&i { p=p->link; i++; } while(p&&j { st->link=p; st=p; j++; p=p->next; } if(j!=n) return NULL; else return R; }