第2章习题答案
●习题2-1
1.79 62 34 57 26 48
2.26 34 48 57 62 79
3.48 56 57 62 79 34
4.56 57 79 34
5.26 34 39 48 57 62
●习题2-3
1.
ElemType delete_min(List &L)
{ int i,len,min;
ElemType e;
if(Emptylist(L)
{ printf(‘线性表为空!\n’); exit(1);}
len=LenthList(L);
min=1;
for(i=2;i<=len;i++)
if(GetList(L,min)>GetList(L,i)) min=i;
e= GetList(L,min);
DeleteList(L,e,min);
InsertList(L, GetList(L, LenthList(L)),min);
return e;
}
2.
bool delete_st(ListTyle &L, ElemType s, ElemType t) {
int i;
ElemType e;
if(Emptylist(L)
{ printf(‘线性表为空!\n’); return false;}
i=1;
while(i<=LenthList(L))
{
If(GetList(L,i)>=s&&GetList(L,i)<=t)
DeleteList(L,e,i);
else
i++;
}
return ture;
}
void MergeList( List La , List Lb , List &Lc ) {
InitList(Lc);
int i=j=1 , k=0, La_len , Lb_len;
ElemType a , b;
La_len = LenthList (La); Lb_len=LenthList (Lb);
While ( ( i<=La_len) && ( j<=Lb_len ) ) {
a=GetList( La , i ); b=GetList( Lb , j );
if ( a<=b ) { InsertList ( Lc , a, ++k ) ; ++i ; }
else { InsertList ( Lc , b , ++k ) ; ++j ; }
}
while ( i<=La_len)
{ a=GetList( La , i++ ) ; InsertList ( Lc , a, ++k ); }
while ( j<=Lb_len )
{ b=GetList( Lb , j++ ) ; InsertList ( Lc , b,++k ); } }//MergeList
习题2-4
2.
ElemType GetMax(LNode* HL)
{ LNode* p;
ElemType max;
If(HL==NULL)
{ cout<<”链表为空!”< p=HL; max=p->data; while(p!=NULL) { if(max P=p->next; } return max; } 3. int countList(LNode *HL, ElemType x ) { LNode *p; int count=0; for(p=HL; p!=NULL; p=p->next) if(p->data==x) count++; return count; } 4. LNode* BuildLNode(int *a, int n) int i; LNode* HL,p,q; HL=p=(int *)malloc(sizeof(LNode)); p->data=a[0]; for(i=1;i { q=(int *)malloc(sizeof(LNode)); q->data=a[i]; q->next=NULL; p->next=q; p=q; } return HL; } 5. LNode* MergeLNode(LNode *&La, LNode *&Lb) { ElemType m; LNode *p; while(Lb!=NULL) { m=Lb->data; InsertList(La,m,0); p=Lb; Lb=Lb->next; free(p); } return La; } 习题2-6 要修改的地方如下: (1)初始化语句: LNode *cp=HL; LNode* ap=NULL; 改为: LNode *cp=HL->next; LNode* ap=HL; (2)删除下列把新结点插入到表头的语句段: if(ap==NULL){ newptr->next=HL; HL=newptr;} else