1.4.4 几种变形链表 1.循环链表:让线性链表最后一个结点指针指向第一个结点。 head 头指针 head 判空条件:head = = NULL; 头:p ==head && head!=^ 尾:p ->lin k==head&&head!=^ 2.带表头结点链表:附加结点不链表中结点,它提供一定特殊信息,便于链表操作。 head head 判空条件:head->lin k==NULL 或 p -lin k ==NULL&&p ->data==” 特殊值” ; 头:p ==head->lin k&&head->lin k!=NULL 尾:p ->lin k==NULL&&head->lin k!=NULL 3.带表头的循环链表 head head 判空条件:(head = = head->lin k) 或 p ->lin k ==head && p ->data==” 特殊值” 头:head->lin k!=NULL&& p ==head->lin k 尾:p ->lin k==head&&head->lin k!=NULL 循环链表的应用: A(x )=8X60-6X50+4X25+2X10 B(x )=7x 60+6x 50+3x 20 C(x )=15x 60+4x 25+3x 20+2x 10 - ^ // ^ //^ // // ah p a // -1 8 60 6 50 4 25 2 10bh p b // -17 60 -6 50 ch p c ///15 50 4 25 3 20 2 10 3 20 算法:NODE *insert ( pc , c , e ) /* 将一个新结点 t ,挂在 pc 后面 */ NODE *pc ; int c , e ; { NODE *t ; t = ( NODE *) malloc (sizeof (NODE)); t->coef = c; t->exp = e ; pc->link = t ; return ( t ) ; } ch pc t pc t ……….. NODE * polyadd ( ah , bh ) NODE * ah , * bh ; { NODE *pa , *pb , *ch , *pc ; char c ; ch= (NODE *) malloc (sizeof (NODE)) ; ch-exp= -1 ; pc=ch; /* 做个假头结点 便于插入*/ pa= ah->link ; pb= bh->link ; while ( pa->exp!= -1 || pb-exp!= -1 ) { if (pa->exp = = pb->exp ) c= „=‟ ; else if (pa->exp >pb->exp ) c= „> „ ; else c=‟<‟ ; switch ( c ) { case „=‟ : if ( pa->deat+pb->data !=0 ) pc = insert ( pc , pa->coef+pb->coef , pa->exp ) ; pa=pa->link ; pb=pb->link ; break ; case „>‟ : pc= insert ( pc , pa->coef , pa->exp ) ; pa=pa->link ; break ; case „<‟ : pc= insert ( pc , pb->coef , pb->exp ) ; pb=pb->link ; break ; } /*case */ } /* w...