C语言程序设计专项训练题之-单链表.docx
计算机等级考试二级C语言程序设计
专项训练题——单链表
一.程序填空题
1.给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun的功能是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#includestdio.h
typedefstructlist
{
chardata;
structlist*next;
}Q;
voidfun(Q*pa,Q*pb,Q*pc)
{
Q*p;
/**********found**********/
pa-next=___1___;
pb-next=pc;
p=pa;
while(p)
{
/**********found**********/
printf(%c,____2_____);
/**********found**********/
p=____3____;
}
printf(\n);
}
intmain()
{
Qa,b,c;
a.data=E;b.data=F;c.data=G;c.next=NULL;
fun(a,b,c);
return0;
}
2.给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#includestdio.h
#includestdlib.h
#defineN8
typedefstructlist
{
intdata;
structlist*next;
}SLIST;
SLIST*creatlist(int*a);
voidoutlist(SLIST*);
voidfun(SLIST*h,int*n)
{
SLIST*p;
/**********found**********/
___1___=0;
p=h-next;
while(p)
{
(*n)++;
/**********found**********/
p=p-___2___;
}
}
intmain()
{
SLIST*head;
inta[N]={12,87,45,32,91,16,20,48},num;
head=creatlist(a);
outlist(head);
/**********found**********/
fun(___3___,num);
printf(\nnumber=%d\n,num);
return0;
}
SLIST*creatlist(inta[])
{
SLIST*h,*p,*q;
inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;iN;i++)
{
q=(SLIST*)malloc(sizeof(SLIST));
q-data=a[i];p-next=q;p=q;
}
p-next=0;
returnh;
}
voidoutlist(SLIST*h)
{
SLIST*p;
p=h-next;
if(p==NULL)printf(ThelistisNULL!\n);
else
{
printf(\nHead);
do
{
printf(-%d,p-data);
p=p-next;
}while(p!=NULL);
printf(-End\n);
}
}
3.给定程序中,函数fun的功能是:计算出带头结点的单向链表中各结点数据域之和作为函数值返回。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。