假设有一个带表头结点的链表,表头指针为head,每个结点含3个域:data,next和prior。其中data为整型数域,next和prior均为指针域。现在所有结点已经由next域连接起来,试编写一个算法,利用prior域(此域初值为NULL)把所有结点

admin2012-08-16  41

问题 假设有一个带表头结点的链表,表头指针为head,每个结点含3个域:data,next和prior。其中data为整型数域,next和prior均为指针域。现在所有结点已经由next域连接起来,试编写一个算法,利用prior域(此域初值为NULL)把所有结点按照其值从小到大的顺序链接起来。

选项

答案定义类型LinkList如下: typedefstructnode {intdata; structnode*next.*prior; }LinkList; 此题可采用插入排序的方法,设P指向待插入的结点,用q搜索已由prior域链接的有序表找到合适位置将P结点链入。算法描述如下: insert(LinkList冰head) {LinkList*P,*S,*q; P=head->next;//p指向待插入的结点,初始时指向第一个结点 while(P!=NULL) {S=head;//s指向q结点的前趋结点 q=head一>prior;//q指向由prior域构成的链表中待比较的结点 while((q!=NULL)&&(P->data>q->data))//查找插入结点P的合适的插入位置 {S=q;q=q->prior;|s->prior=P; P->prior=q;//结点P插入到结点s和结点q之间 P=P->next;}}

解析
转载请注明原文地址:https://jikaoti.com/ti/Hd7QFFFM
0

最新回复(0)