[说明]
这个是一个链接存储线性表的直接插入排序函数。把未排序序列中的第一个结点插到已排序序列中。排序完毕,链表中的结点按结点值由小到大链接。
[函数]
typedef struct node
char data;
struct node *link;
NODE;
NODE *insert_sort (NODE *h)
NODE *t,*s,*u,*v;
s=h->link;
h->link=NULL:
while(s!=NULL)
for(t=s,v=h;v!=NULL && V->data<t->data; (1) , (2) );
s=s->link;
if(V==h) (3) ;
else (4) ;
(5) ;
return h;
参考答案:t->link=v
解析: 本题的主要思路是:将当前的结点插入到该结点前的有序单链表中,直到当前结点为空。在将当前结点插入到该结点前的有序单链表的过程中,类似顺序表的策略,从单链表的表头开始查找,直到找到该结点应插入的位置,然后完成插入任务。在当前结点不为空且其值小于该结点值时,当前结点向后移,则空(1)应填u=v,空(2)应填v=v->link。在当前结点为空或其值大于等于该结点值时,跳出for循环。若当前结点就是头结点,则将头结点指向该结点,即空(3)填h=t;否则在u和v指向的结点间插入该结点t,即空(4)填u->link=t,空(5)填t->link=v。