[说明]
函数sort(NODE*head)的功能是:用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻节点中的元素,若较小的元素在后面,则交换这两个节点中的元素值。其中,head指向链表的头节点。排序时,为了避免每趟都扫描到链表的尾节点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个节点。例如,对于图8-25(a)所示的链表进行一趟冒泡排序后,得到图8-25(b)所示的链表。
链表的节点类型定义如下:
typedef Struet Node
int data;
struct Node *next;
NODE;
[C语言函数]
void sort(NODE *head)
NODE *ptr, *preptr, *endptr;
int tempdata;
ptr=head->next;
while (1) /*查找表尾节点*/
ptr=ptr->next;
endptr=ptr; /*令endptr指向表尾节点*/
ptr= (2) ;
while(ptr!=endptr)
while( (3) )
if(ptr->data>ptr->next->data)
tempdata=ptr->data; /*交换相邻节点的数据*/
ptr->data=ptr->next->data;
ptr->next->data=tempdata;
preptr= (4) ;ptr=ptr->next;
endptr= (5) ; ptr=head->next;
(5)处填()
参考答案:preptr
解析:
从(1)处代码中可知ptr最后应该指向表尾节点。所以(1)处应为ptr->next。进行冒泡排序时,不断调整元素的位置,最终使最大元素放到表的最后,所以(2)处应为head->next。(3)处的循环条件应该是扫描的节点,不是最后一个节点,所以(3)处应为ptr!=endptr。ptr每向后修改一次,preptr就要修改一次,所以(4)处应为ptr,(5)处应为preptr。