下列给定程序中已建立了一个带头结点的单向链表,在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增

admin2015-11-24  45

问题 下列给定程序中已建立了一个带头结点的单向链表,在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include(stdio.h>
#include<stdlib.h>
#define N 8
typedef strucfi list
{  int data;
    struct list:*next;
}SLIST;
void fun(SLIST*P)
{  SLIST*t,*s;
    t=P一>next;s=P;
    while(t一>next!=NULL)
    {s=t;
/**********found***********/
    t=t一>【1】
    }
/**********found***********/
  printf(“%d”,【2】),
  S一>next=NULL;
/**********found***********/
  free(【3】);
}
SLIST*creatlist(int*a)
{  SLIST*h,*P,*q;
    int i;
    h=P=(SLIST*)malloc(sizeof
(SLIST));
    for(i=0;i<N;i++)
    {q=(SLIST*)malloc(sizeof
(SLIST));
    q一>data=a; p一>next=q,
    P=q;
    }
    P一>next=0:
    return h;
}
void outlist(SLIST*h)
{  SLIST *P;
    P=h一>next:
    if(P==NULL)
    printf(“\nThe list is NULL!
\n”);
    else
    {printf(“\nHead”);   
    do{printf(“一>%d”,p一>data);
    p=p一>next;
    }while(P!=NULL);
    printf(“一>End\n”);
    }
}
main()
{  SLIST *head;
  int a[N]=(11,12,15,18,19,22,25,29);
  head=treatlist;(a);
  printf(“\nOutput from head:\n”);
  outl ist(head);
  printf(“\nOutput from tail:\n”);
  while(head一>next!=NULL){
    fun(head);
    printf(“\n\n”);
    printf(“\nOutput from head
again:\n”);
    outlist(head);
    }
}

选项

答案(1)next (2)t一>data (3)t

解析 填空1:因为是链表操作,所以要使t逐一往后移动,语句为t=t一>next;。
    填空2:输出链表结点的数据域,即t->data。
    填空3:使用free函数将t所指向的内存空间释放。释放内存空间函数free的调用形式为:free(void*p);。功能:释放p所指向的一块内存空间,p是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区是由malloc:或calloc函数所分配的区域。
转载请注明原文地址:https://kaotiyun.com/show/0jID777K
0

相关试题推荐
随机试题
最新回复(0)