阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】函数sort (NODE *head)的功能是;用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中,head指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图4-1(a)的链表进行一趟冒泡排序后,得到图4-1(b)所示的链表。链表的结点类型定义如下:typedef struct

题目

阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。

【说明】

函数sort (NODE *head)的功能是;用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中,head指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图4-1(a)的链表进行一趟冒泡排序后,得到图4-1(b)所示的链表。

链表的结点类型定义如下:

typedef struct 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;

}

}


相似考题
更多“ 阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】函数sort (NODE *head)的功能是;用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交”相关问题
  • 第1题:

    [说明]

    已知包含头节点(不存储元素)的单链表的元素已经按照非递减方式排序,函数compress(NODE *head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。

    处理过程中,当元素重复出现时,保留元素第一次出现所在的节点。

    图8-29(a)、(b)是经函数compress( )处理前后的链表结构示例图。

    链表的节点类型定义如下:

    typedef struct Node {

    int data;

    struct Node *next;

    }NODE;

    [C语言函数]

    void compress(NODE *head)

    {

    NODE *ptr, *q;

    ptr= (1) ; /*取得第一个元素节点的指针*/

    while( (2) && ptr->next) {

    q=ptr ->next;

    while(q && (3) ){/*处理重复元素*/

    (4) =q ->next;

    free(q);

    q=ptr->next;

    }

    (5) =ptr->next;

    } /*end of while*/

    } /*end of compress*/


    正确答案:head>next ptr ptr->data==q->data或其等价形式 ptr->next ptr
    head>next ptr ptr->data==q->data或其等价形式 ptr->next ptr 解析:本题考查的是对链表的查找、插入和删除等运算。要找到重复的元素并将其删除而使各元素互不相同。我们可以顺序遍历链表,比较逻辑上相邻的两个元素是否相同,如果相同则删除后一个元素,以此类推。代码如下:
    VOid Compress(NODE *head)
    {
    NODE *ptr, *q;
    ptr=head->next; /*取得第一个元素节点的指针*/
    while(ptr && ptr->next){
    q=ptr->next;
    while(q && ptr->data==q>data){/*处理重复元素*/
    ptr->next=q->next;
    free(q);
    q=ptr->next;
    }
    ptr=ptr->next;
    }/*end of while*/
    }/*end of compress*/

  • 第2题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案:

  • 第3题:

    用冒泡法对数组a中10个元素{60,70,99,10,90,40,20,50,30,80} 按从大到小的顺序进行排序。要求定义函数sort实现排序,在主函数中输出排好序的数组元素。


    9,14,18,4,20,11,17,22,23,25

  • 第4题:

    试题四(共 15 分)

    阅读以下说明和 C 语言函数,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    已知包含头结点(不存储元素)的单链表的元素已经按照非递减方式排序,函数compress(NODE *head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。

    处理过程中,当元素重复出现时,保留元素第一次出现所在的结点。

    图4-1(a)、(b)是经函数 compress()处理前后的链表结构示例图。

    链表的结点类型定义如下:

    typedef struct Node {

    int data;

    struct Node *next;

    }NODE;

    [C 语言函数]

    void compress(NODE *head)

    { NODE *ptr,*q;

    ptr = (1) ; /* 取得第一个元素结点的指针 */

    while ( (2) && ptr -> next) {

    q = ptr -> next;

    while(q && (3) ) { /* 处理重复元素 */

    (4) = q -> next;

    free(q);

    q = ptr -> next;

    }

    (5) = ptr -> next;

    }/* end of while */

    }/* end of compress */


    正确答案:

  • 第5题:

    阅读以下说明和C语言函数,将解答填入答题纸的对应栏内。【说明】函数sort (NODE *head)的功能是:用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中,head指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图(a)的链表进行一趟冒泡排序后,得到图(b)所示的链表。




    答案:
    解析:
    (1) ptr->next(2) head->next(3) ptr!=endptr,或其等价形式⑷ptr(5) preptr