C++程序设计教程参考答案第6章.docx
- 文档编号:29211678
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:10
- 大小:15.33KB
C++程序设计教程参考答案第6章.docx
《C++程序设计教程参考答案第6章.docx》由会员分享,可在线阅读,更多相关《C++程序设计教程参考答案第6章.docx(10页珍藏版)》请在冰豆网上搜索。
C++程序设计教程参考答案第6章
习题1结点数据之和:
#include
structNode{
intdata;
Node*next;
};
intsum(Node*head)
{
ints=0;
while(head){
s+=head->data;
if(head->next)cout<
elsecout< head=head->next; } returns; } voidmain() { Nodenode[10],*h=node; for(inti=0;i<10;i++){//建立链表 node[i].data=i+1; if(i==9)node[i].next=0; elsenode[i].next=&node[i+1]; } cout<<"链表为: "; ints=sum(h); cout<<"各结点的数据域之和是: "< } 习题2合并链表: #include structNode{ intdata; Node*next; }; voidprint(Node*head) { while(head){ if(head->next)cout< elsecout< head=head->next; } } Node*merge(Node*head1,Node*head2) { Node*head,*p; if(head1->data head=head1; head1=head1->next; } else{ head=head2; head2=head2->next; } p=head; while(head1&&head2){ if(head1->data p->next=head1; head1=head1->next; } else{ p->next=head2; head2=head2->next; } p=p->next; } if(head1)p->next=head1; elseif(head2)p->next=head2; returnhead; } voidmain() { Nodenode1[10],*h1=node1,*h; Nodenode2[10],*h2=node2; for(inti=0;i<10;i++){//建立链表 node1[i].data=i+1; node2[i].data=2*i; if(i==9){ node1[i].next=0; node2[i].next=0; } else{ node1[i].next=&node1[i+1]; node2[i].next=&node2[i+1]; } } cout<<"链表1为: "; print(h1); cout<<"链表2为: "; print(h2); h=merge(h1,h2); cout<<"合并后的链表为: "; print(h); } 习题3删除x结点: #include structLink{ intdata; Link*next; }; voidprint(Link*h) { while(h){ if(h->next)cout< elsecout< h=h->next; } } Link*build(Link*h,intn)//用数组h建立链表head { Link*head=0,*p; for(inti=0;i p=newLink; p->data=h[i].data; if(h==0){ head=p; p->next=0; } else{//把p插入head之前 p->next=head; head=p; } } returnhead; } Link*find(Link*h,intx)//不包括头结点为x的情况 { Link*p; while(h){ p=h; h=h->next; if(h==0)return0; if(h->data==x)returnp; } return0; } intdele(Link*h,intx) { Link*p1=find(h,x); if(! p1)return-1; Link*p2=p1->next; p1->next=p2->next; deletep2; return0; } voidrelease(Link*h) { Link*p; while(h){ p=h; h=h->next; deletep; } } voidmain() { LinkL[10],*h; for(inti=0;i<10;i++) L[i].data=2*i; h=build(L,10); cout<<"链表为: "; print(h); intflag,x; cout<<"请输入x的值: "; cin>>x; if(h->data==x){//处理头结点为x的情况 Link*p1=h; h=h->next; deletep1; flag=0; } elseflag=dele(h,x);//处理头结点不为x的情况 if(flag==-1)cout<<"链表中无值为"< \n"; else{ cout<<"删除值为"< \n"; print(h); } release(h); } 习题4链表约瑟夫环: #include structNODE{ intdata; NODE*next; }; voidprint(NODE*h) { NODE*p=h; while(p->next! =h){ cout< p=p->next; } cout< } NODE*build(intn)//建立链表h { NODE*h=0,*p,*pend; for(inti=1;i<=n;i++){ p=newNODE; p->data=i; if(h==0)h=p; elsepend->next=p;//把p插入pend之后 pend=p; } pend->next=h; returnh; } NODE*number(NODE*h,intm) { NODE*p=h,*p1; while(p->next! =p){ for(inti=1;i p1=p; p=p->next; } p1->next=p->next; cout< deletep; p=p1->next; } returnp; } voidmain() { intn,m; cout<<"请输入人数: "; cin>>n; NODE*h=build(n); cout<<"链表为: "; print(h); cout<<"请输入报数终止值m: "; cin>>m; cout<<"出列顺序为: "; NODE*p=number(h,m); cout<<"\n最后留下的人为: "< deletep; } (学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 参考答案