设有一个带头结点的循环单链表,其结点值均为正整数。试设计一个算法,反复找出单链表中结点值最小的结点,并输出之,然后将该结点从中删除,直到单链表空为止,最后再删除表头结点。 (1)给出算法的基本设计思想; (2)根据设计思想,采用C或C++或JAVA语言表述

admin2013-12-31  29

问题 设有一个带头结点的循环单链表,其结点值均为正整数。试设计一个算法,反复找出单链表中结点值最小的结点,并输出之,然后将该结点从中删除,直到单链表空为止,最后再删除表头结点。
(1)给出算法的基本设计思想;
(2)根据设计思想,采用C或C++或JAVA语言表述算法,关键之处给出注释。

选项

答案用C语言算法描述如下: void delall(LinkList&L){ LNode*p,*pre,*minp,*minpre; while(L-> next!=L){ //循环单链表不空时循环 p=L->next: pre=L; minp=p; minpre=pre; while(p!=L){ //从头开始查找最小值的结点 if(p->data<minp->data){ minp=p; minpre=pre; } pre=p; //p、pre同步后移 p=p-> next: } printf("%c",minp->data); //输出最小值结点 minpre->next=minp->next; //删除最小值结点 free(minp); } free(L); }

解析
转载请注明原文地址:https://kaotiyun.com/show/KSxi777K
0

最新回复(0)