#include #include struct List { int data; struct List*next; }; typedef struct List node; typedef no

admin2013-12-15  34

问题 #include
     #include
  struct List
  {
    int data;
    struct List*next;
    };
    typedef struct List node;
    typedef node*link;
    void main()
    {
    link ptr,head,tail;
    int num,i;
    tail=(link)malloc(sizeof(node));
    tail一>next=(1):
    ptr=tail;
    printf("\nplease input data:\n");
    for(i=0;i<=4;i++)
    {
    scanf("%d",(2)):
    ptr->data=num;
    head=(link)malloc(sizeof(node));
    head一>next= (3) ;
    ptr=head;
    }
    ptr=(4) ;
    while(ptr!=NULL)
    {
    printf("the value is%d.\n",(5));
    ptr=ptr一>next;
    }
    }

选项

答案(1)NULL (2)&num (3)ptr (4)head一>next (5)ptr一>data

解析 本程序实现的功能是:利用尾插法创建一个包含5个数据结点的单链表,然后将这5个结点的数据输出。
    程序一开始定义了一个结构体,即结点结构:
    struct List
    {
    int data:
    struct List*next:
    };
    由此可以看出,单链表的每个结点包含了一个数据域和一个指向后继结点的指针域。
    在main函数中,首先创建一个结点,令尾指针指向该结点:tail=(link)malloc(sizeof(node));,由于后面第二句ptr=tail令工作指针指向尾结点,可知第一个空填NULL,即将尾结点的指针域置为NULL,tail一>next=NULL;。
    for循环的作用是依次创建5个结点,并为这5个结点的数据域赋值。由ptr—>data=num;可知其前一句是用num变量保存输入的整数,则第二个空填&num,即scanf(’%d’,&num);。
    由于头指针是指向第一个结点的,因此第三个空填入ptr,即head一>next=ptr;,令头指针一直指向第一个结点的地址。
    最后用while循环输出链表中每个结点的数据值,因此在进入while循环之前令工作指针ptr指向第一个结点,即ptr=head一>next;,在输出结点数据值时,利用ptr一>data取当前指针指向的数据域即可,即printf("the value is%d.\n",ptr一>data);。
转载请注明原文地址:https://kaotiyun.com/show/w0al777K
0

最新回复(0)