struct employee { long hum; float salary; struct employee*next; }; int n; struct employee*Create()

admin2013-12-19  40

问题 struct employee
    {
    long hum;
    float salary;
    struct employee*next;
    };
    int n;
    struct employee*Create()
    {
    struct employee*head;
    struct employee*p1=NULL:
    struct employee*p2=NULL:
    (1)
    p1=(struct employee*)malloc(LEN):
    (2)
    if(p1===NULL)
    {
    printf(“nCan’t create it,try it again in a moment!\n”);
    return NULL;
    }
    else
    {
    head=NULL:
    (3)
    while(p1->num!=0)
    {
    n++;
    if(n==1)
    head=p1;
    p2->next=ULL:
    else
    p2->next=p1;
    p2=p1;
    p1=(struct employee*)malloc(LEN);
    seanf(“%ld%f”,&p1->num,&p1->salary);
    }
    (4)
    (5)
    p1=NULL;
    return head;
    }

选项

答案(1)n=0 (2)p2=p1 (3)scanf(“%ld%f”,&p1->num,&p1->salary) (4)p2->next=NULL (5)free(p1)

解析 本程序主要定义了一个职员信息的结构体employee和一个用于建立链表的方法Create(),此外还定义了一个全局变量n,用于保存链表中的结点个数。
    在Create()方法中,首先声明了3个指针变量:head、p1和p2。其中,head用于指向头结点,p1用于保存新创建的结点的地址,p2用于保存原链表最后一个结点的地址,p1、p2的初始值均为NULL。在未建立链表之前,首先将保存链表结点数的全局变量n置为0,则第一个空格应填入n=0。
    p1=(struct employee*)malloc(LEN)为开辟一个新结点,如果结点开辟成功,则p2先把它的指针保存下来以备后用,因此第二个空格填入p1=p2。
    当结点开辟不成功时,return NULL;当成功时,指向开始结点的指针head赋值为NULL。由while(p1->num!=0)可推断出,第三个空格应是一个输入语句,用于输入一个职工编号与工资,因此填入scanf(“%ld%f”,&p1->num,&p1->salary)。
    创建完链表后,应将单链表的最后一个结点赋值为NULL,因此第四个空格应填入p2->next=NULL。为了使工作指针不成为野指针,最后释放工作指针p1,因此第五个空格应填入free(p1)。
转载请注明原文地址:https://jikaoti.com/ti/QoU3FFFM
0

最新回复(0)