《数据结构与算法》廖明宏课后答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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->elementelement)

{

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(inum)

{

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;

}

相关文档
最新文档