.對單鏈表中元素按插入方法排序的C語言描述算法如下其中L為鏈表頭結點指針請填充算法中標出的空白處完成其功能
typedef struct node
{int data; struct node *next;
}linknode*link;
void Insertsort(link L)
{ link pqru;
p=L>next; () ;
while( () )
{ r=L; q=L>next;
while( () && q>data<=p>data) {r=q; q=q>next;}
u=p>next; () ; () ; p=u;
}
}【北京科技大學 二 (分)】
.下面是一個求兩個集合A和B之差C=AB的程序即當且僅當e是A的一個元素但不是B中的一個元素時e才是C中的一個元素集合用有序鏈表實現初始時AB集合中的元素按遞增排列C為空操作完成後AB保持不變C中元素按遞增排列下面的函數append(laste)是把值為e的新結點鏈接在由指針last指向的結點的後面並返回新結點的地址函數difference(AB)實現集合運算AB並返回表示結果集合C的鏈表的首結點的地址在執行AB運算之前用於表示結果集合的鏈表首先增加一個附加的表頭結點以便新結點的添加當AB運算執行完畢再刪除並釋放表示結果集合的鏈表的表頭結點
程序(a)(編者略去這個PASCAL程序)
程序(b)
typedef struct node{ int element; struct node *link;
}NODE;
NODE *A*B*C;
NODE *append (NODE *lastint e)
{ last>link=(NODE*) malloc (sizeof(NODE));
last>link>element=e;
return(last>link);
}
NODE *difference(NODE *ANODE *B)
{NODE *C*last;
C=last=(NODE*) malloc (sizeof(NODE));
while ()
if (A>element<B>element) { last=append(lastA>element); A=A>link; }
else if () { A=A>link; B=B>link; } ELSE () ;
while ()
{ last=append(lastA>element); A=A>link; }
() ; last=C; C=C>link; free (last); return (C);
}
/*call form:C=difference(AB);*/【上海大學 一 (分)】
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/22558.html