一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef ,指数域exp和指针域next;现对链表求一阶导数 ,链表的头指针为ha,头结点的exp域为 –1。 derivative(ha) { q=ha ; pa=ha->next; while( (1)_______) { if ( (2)____) { ( (3)__); free(pa); pa= ( (4) _); } else{ pa->coef ( (5) ___); pa->exp( (6)___); q=( (7) __);} pa=( (8)________); } }
举一反三
- 一个单向链表,head指向头结点,每个结点包含数据域data和指针域next。链表按数据域递增有序排列,完成以下函数,使删除链表中数据域值相同的结点。typedefintdatatype;typedefstructnode{datatypedata;structnode*next;}linklist;delete(linklist*head){linklist*p,*q;p=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){________;free(p);P=q->next;}else{q=q;________}return(s);}
- 1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。 //将合并逆置后的结果放在C表中,并删除B表 StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C) { LinkListpa,pb,qa,qb; pa=A; pb=B; qa=pa;//保存pa的前驱指针 qb=pb;//保存pb的前驱指针 pa=pa->next; pb=pb->next; A->next=NULL; C=A; while(pa&&pb){ if(pa->datadata){ qa=pa; pa=pa->next; qa->next=A->next;//将当前最小结点插入A表表头 A->next=qa; } else{ qb=pb; pb=pb->next; ()//将当前最小结点插入B表表头 A->next=qb; } } while(pa){ qa=pa; pa=pa->next; qa->next=A->next; A->next=qa; } while(pb){ qb=pb; pb=pb->next; qb->next=A->next; A->next=qb; } pb=B; free(pb); returnOK; }
- pa=pa->next; qa->next=A->next;//将当前最小结点插入A表表头 A->next=qa; } else{ qb=pb; pb=pb->next; ()//将当前最小结点插入B表表头 A->next=qb; } } while(pa){ qa=pa; pa=pa->next; qa->next=A->next; A->next=qa; } while(pb){ qb=pb; pb=pb->next; qb->next=A->next; A->next=qb; } pb=B;
- 设有一个单向链表,结点的指针域为next,头指针为head,p指向尾结点,为了使该单向链表改为单向循环链表,可用语句()。
- 要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head->next;()。