C语言程序设计专项训练题之 单链表.docx
- 文档编号:23207593
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:37
- 大小:19.22KB
C语言程序设计专项训练题之 单链表.docx
《C语言程序设计专项训练题之 单链表.docx》由会员分享,可在线阅读,更多相关《C语言程序设计专项训练题之 单链表.docx(37页珍藏版)》请在冰豆网上搜索。
C语言程序设计专项训练题之单链表
计算机等级考试二级C语言程序设计
专项训练题——单链表
一.程序填空题
1.给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun的功能是:
将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
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所指的存储单元中。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#include
#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;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的功能是: 计算出带头结点的单向链表中各结点数据域之和作为函数值返回。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN8 typedefstructlist { intdata; structlist*next; }SLIST; SLIST*creatlist(int*); voidoutlist(SLIST*); intfun(SLIST*h) { SLIST*p; ints=0; p=h->next; while(p) { /**********found**********/ s+=p->___1___; /**********found**********/ p=p->___2___; } returns; } intmain() { SLIST*head; inta[N]={12,87,45,32,91,16,20,48}; head=creatlist(a); outlist(head); /**********found**********/ printf("\nsum=%d\n",fun(___3___)); return0; } SLIST*creatlist(inta[]) { SLIST*h,*p,*q; inti; h=p=(SLIST*)malloc(sizeof(SLIST)); for(i=0;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"); } } 4.给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。 函数fun的功能是: 删除链表中数据域值相同的结点,使之只保留一个。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN8 typedefstructlist { intdata; structlist*next; }SLIST; voidfun(SLIST*h) { SLIST*p,*q; p=h->next; if(p! =NULL) { q=p->next; while(q! =NULL) { if(p->data==q->data) { p->next=q->next; /**********found**********/ free(___1___); /**********found**********/ q=p->___2___; } else { p=q; /**********found**********/ q=q->___3___; } } } } SLIST*creatlist(int*a) { SLIST*h,*p,*q; inti; h=p=(SLIST*)malloc(sizeof(SLIST)); for(i=0;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("\nThelistisNULL! \n"); else { printf("\nHead"); do{ printf("->%d",p->data); p=p->next; }while(p! =NULL); printf("->End\n"); } } intmain() { SLIST*head; inta[N]={1,2,2,3,4,4,4,5}; head=creatlist(a); printf("\nThelistbeforedeleting: \n"); outlist(head); fun(head); printf("\nThelistafterdeleting: \n"); outlist(head); return0; } 5.给定程序中,函数fun的功能是: 在带头结点的单向链表中,查找数据域中值为ch的结点。 找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回值为0。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN8 typedefstructlist { intdata; structlist*next; }SLIST; SLIST*creatlist(char*); voidoutlist(SLIST*); intfun(SLIST*h,charch) { SLIST*p; intn=0; p=h->next; /**********found**********/ while(p! =___1___) { n++; /**********found**********/ if(p->data==ch)return___2___; elsep=p->next; } return0; } intmain() { SLIST*head; intk; charch; chara[N]={'m','p','g','a','w','x','r','d'}; head=creatlist(a); outlist(head); printf("Enteraletter: "); scanf("%c",&ch); /**********found**********/ k=fun(___3___); if(k==0)printf("\nNotfound! \n"); elseprintf("Thesequencenumberis: %d\n",k); return0; } SLIST*creatlist(char*a) { SLIST*h,*p,*q; inti; h=p=(SLIST*)malloc(sizeof(SLIST)); for(i=0;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("\nThelistisNULL! \n"); else { printf("\nHead"); do{ printf("->%c",p->data); p=p->next; }while(p! =NULL); printf("->End\n"); } } 6.给定程序中已建立一个带头结点的单向链表,在main函数中将多次调用函数fun,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN8 typedefstructlist { intdata; structlist*next; }SLIST; voidfun(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; inti; h=p=(SLIST*)malloc(sizeof(SLIST)); for(i=0;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("\nThelistisNULL! \n"); else { printf("\nHead"); do{ printf("->%d",p->data); p=p->next; }while(p! =NULL); printf("->End\n"); } } intmain() { SLIST*head; inta[N]={11,12,15,18,19,22,25,29}; head=creatlist(a); printf("\nOutputfromhead: \n"); outlist(head); printf("\nOutputfromtail: \n"); while(head->next! =NULL) { fun(head); printf("\n\n"); printf("\nOutputfromheadagain: \n"); outlist(head); } return0; } 7.给定程序中已建立一个带头结点的单向链表,链表中各结点按结点数据域中的数据从小到大顺序链接。 函数fun的功能是: 把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排列。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN8 typedefstructlist { intdata; structlist*next; }SLIST; voidfun(SLIST*h,intx) { SLIST*p,*q,*s; s=(SLIST*)malloc(sizeof(SLIST)); /**********found**********/ s->data=___1___; q=h; p=h->next; while(p! =NULL&&x>p->data) { /**********found**********/ q=___2___; p=p->next; } s->next=p; /**********found**********/ q->next=___3___; } SLIST*creatlist(int*a) { SLIST*h,*p,*q; inti; h=p=(SLIST*)malloc(sizeof(SLIST)); for(i=0;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("\nThelistisNULL! \n"); else { printf("\nHead"); do{ printf("->%d",p->data); p=p->next; }while(p! =NULL); printf("->End\n"); } } intmain() { SLIST*head; intx; inta[N]={11,12,15,18,19,22,25,29}; head=creatlist(a); printf("\nThelistbeforeinserting: \n"); outlist(head); printf("\nEnteranumber: "); scanf("%d",&x); fun(head,x); printf("\nThelistafterinserting: \n"); outlist(head); return0; } 8.给定程序中,函数fun的功能是: 将带头结点的单链表逆置。 若原链表中从头至尾结点数据域依次为: 2、4、6、8、10,逆置后,从头到尾结点数据域依次为: 10、8、6、4、2。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN5 typedefstructnode { intdata; structnode*next; }NODE; voidfun(NODE*h) { NODE*p,*q,*r; /**********found**********/ p=h->__1__; /**********found**********/ if(p==__2__)return; q=p->next; p->next=NULL; while(q) { r=q->next;q->next=p; /**********found**********/ p=q;q=__3__; } h->next=p; } NODE*creatlist(inta[]) { NODE*h,*p,*q; inti; h=(NODE*)malloc(sizeof(NODE)); h->next=NULL; for(i=0;i { q=(NODE*)malloc(sizeof(NODE)); q->data=a[i]; q->next=NULL; if(h->next==NULL)h->next=p=q; else{p->next=q;p=q;} } returnh; } voidoutlist(NODE*h) { NODE*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"); } } intmain() { NODE*head; inta[N]={2,4,6,8,10}; head=creatlist(a); printf("\nTheoriginallist: \n"); outlist(head); fun(head); printf("\nThelistafterinverting: \n"); outlist(head); return0; } 9.给定程序中,函数fun的功能是将不带头结点的单向链表逆置。 即若原链表从头至尾结点数据域依次为: 2、4、6、8、10,逆置后,从头至尾结点数据域依次为: 10、8、6、4、2。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #include #defineN5 typedefstructnode { intdata; structnode*next; }NODE; /**********found**********/ __1__fun(NODE*h) { NODE*p,*q,*r; p=h; if(p==NULL) returnNULL; q=p->next; p->next=NULL; /**********found**********/ while(__2__) { r=q->next; q->next=p; p=q; /********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计专项训练题之 单链表 语言程序设计 专项 训练
![提示](https://static.bdocx.com/images/bang_tan.gif)