struct student { long num; int score; struct student*next; }; struct student*insert(struct student*head,

admin2013-12-19  37

问题 struct student
    {
    long num;
    int score;
    struct student*next;
    };
    struct student*insert(struct student*head,struct student * p)
    {
    struct student*p1,*p2,*p0;
    p1=head;
    (1)
    if(p1==NULL)
    {
    head=p0;
    (2)
    }
    else
    {
    if((3))
    {
    p2=p1;
    p1=p1->next;
    }
    if(p0->num==pl->num)
    {
    (4)
    (5)
    n=n+1:
    }
    else
    {
    printf(“\n%ld not been found!\n”,num);
    }
    }
    return head;
    }

选项

答案(1)p0=p (2)p0->next=NULL (3)(p0->num!=p1->num)&&p1->next!=NULL (4)p0->next=p1->next (5)p1->next=p0

解析 程序声明了一个结构体student作为结点结构,每个结点包括学号num、成绩score、指向下一结点的指针next;此外还声明了一个函数insert(struct student*heacl,structstudent*p),用于实现结点的插入操作,该函数有head和p两个参数,其中head指明要插入的链表,p为要插入的结点。
    在insert()函数中,首先声明了3个结点:p1、p2和p0。接着p1=head,即令p1指针指向第一个结点。从第一个if语句中的head=p0可以推断出,第一个空格语句是将要插入结点的指针赋予p0,因此填入p0=p。由于第一个if语句处理的是向空表插入结点的情况,因此插入一个结点之后,应将该节点的后继指针置NULL,即第二个空格填入p0->next=NULL。
    若要插入的链表不为空,则在查找过程中会发生两种情况,一种是未找到需要的结点,另一种是找到了需要的结点,由第四个空格之前的if(p0->mlm==p1->num)可推断出第三个空格应填入(p0->hum!=p1->mlm)&&p1->next!=NULL,即p1指向的结点不是所要查找的,并且它不是最后一个结点,故应继续往下找,因此有接下来的p2一p1;p1=p1->next;。
    当找到所需的结点p1之后,将p0插入到p1之后。在单链表中插入一个结点,首先将需插入结点的后继结点指向当前节点的后继结点,然后在将当前节点的后继结点指向插入结点,最后n=n+1,将表的长度加1,因此第四、第五个空格分别填入p0->next=p1->next和p1->next=p0。
转载请注明原文地址:https://jikaoti.com/ti/F3U3FFFM
0

最新回复(0)