题目:include<stdio.h> include<stdlib.h> 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个结点的数据输出。程序一开始定义了一个结构体,即结点结构:structList{intdata:structList*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("thevalueis%d.\n",ptr一>data);。