数据结构与算法》廖明宏课后答案
第一次作业(第 2 章) 4.List Combine(List &L1,List &L2) {
LNode *ap1,*ap2,*p;
ap1=L1->next;
ap2=L2->next;
if(ap1->element<ap2->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<la->num)
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<n) //p 指向第n 个元素
q=q->next;
j++;
s->element=x;
s->next=q->next;
q->next=s;
cout<<" 已将x 插在表尾。
"
}else{
cout<<"x 在表中的序号为:"<<n; 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&&ivm)//p 指向第m位
p=p->link;
i++;
while(p&&j<n)
st->link=p;
st=p;
j++;
p=p->next;
}
if(j!=n)
return NULL; else
return R;
}。