对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。请填充算法中标出的空白处,完成其功能。 typedef struct node {int data; struct node*next; }linknode,*link; voidInsertsort(1ink L) {link P,q,r,u; p=L一>next;(1); while((2) ) {r=L; q=n->next; while((3) &&q一>data<=p一>data){r=q; q=q一>next;} u=p一>nextj (4);(5);p=u; } }【北京科技大学2001二(10分)】
下面是一个求两个集合A和B之差C=A-B的程序,即当且仅当e是A的一个元素,但不是B中的一个元素时,e才是C中的一个元素。集合用有序链表实现,初始时,A、B集合中的元素按递增排列,C为空;操作完成后A、B保持不变,C中元素按递增排列。下面的函数append(1ast,e)是把值为e的新结点链接在由指针last指向的结点的后面,并返回新结点的地址;函数difference(A,B)实现集合运算A一B,并返回表示结果集合C的链表的首结点的地址。在执行A一B运算之前,用于表示结果集合的链表首先增加一个附加的表头结点,以便新结点的添加,当A-B运算执行完毕,再删除并释放表示结果集合的链表的表头结点。 typedef struct node{int element; struct node *link;}NODE; NODE *A,*B,*C; NODE *append(NODE*la8t, int e) {last一>1ink=(NODE*) malloc (sizeof(NODE)); 1a8t一>1ink一>element=e; return(last一>link); } NODE*difference(NODE*A,NODE*B) (NODE*c,*1ast; C=la8t=(NODE*)malloc (sizeof(NODE)); while (1) if (A一>elementelement) { 1a8t=append(last,A一>element); A=A一>link; ) else if (2) {A=A一>1ink; B=B一>link;}ELSE (3); while (4) {1ast=append(1ast,A一>element);A=A一>link; ) (5) ; last=c; c=c一>link; free (last); return(C); } /*call form:c=difference(A,B);*/【上海大学2000一、4(10分)】
一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域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) ); } }【南京理工大学2000三、3(10分)】
在一个设有头指针和尾指针的单链表中,执行删除该单链表中最后一个元素的操作与链表的长度无关。( )【中南大学2003一、2(1分)】
A. 正确
B. 错误