【C语言】数据结构C语言版 实验5 递归
/* 编写递归算法int max(int a[],int left, int right),求数组a[left..right]中的最大数。 */ #include "ArrayIo.h" /*请将本函数补充完整,并进行测试*/ int max(int a[],int left,int right) { int mid,lmax,rmax; if(left==right) return a[left]; else { mid=(left+right)/2; lmax=max(a,left,mid); rmax=max(a,mid+1,right); return lmax>rmax?lmax:rmax; } } int main() { int a[10]; input(a,10); print(a,10); printf("数组的最大数是:%d\n",max(a,0,9)); return 0; }
/* 请编写一个递归算法函数void partion(int a[], int left, int right), 将数组a[left..right]中的所有奇数调整到表的左边,所有偶数调整到表的右边。 */ #include "ArrayIo.h" #define N 10 /*请将本函数补充完整,并进行测试*/ void partion(int a[], int left,int right) { int temp; while(left<right) { while(left<right&&a[left]%2==1) //左边找偶数 left++; while(left<right&&a[right]%2==0) //右边找奇数 right--; if(left<right) //左右交换 { temp=a[left]; a[left]=a[right]; a[right]=temp; partion(a,left+1,right-1); } } } int main() { int a[N]; init(a,N); /*随机产生N个数*/ print(a,N); partion(a,0,N-1); print(a,N); return 0; }
/* 请编写递归函数void bubbleSort(int a[],int n), 对长度为n的数组采用冒泡法进行升序排序。 请编写递归函数int binSearch(int a[], int left, int right,int key), 采用二分查找法在数组a[left..right]中查找值为key的元素所在的位置, 若查找失败函数返回-1。 */ #include "ArrayIo.h" #define N 10 /*请将本函数补充完整,并进行测试*/ void bubbleSort(int a[],int n) { int i,temp,flag; if(n>1) { flag=0; for(i=0;i<n-1;i++) { if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } } bubbleSort(a,n-1); } } int binSearch(int a[], int left,int right,int key) { int mid; if(left>right) return -1; else { mid=(left+right)/2; if(a[mid]==key) return mid; else if(a[mid]>key) binSearch(a,left,mid-1,key); else binSearch(a,mid+1,right,key); } } int main() { int x,pos,a[N]; init(a,N); bubbleSort(a,N); print(a,N); printf("请输入要查找的数:\n"); scanf("%d",&x); pos=binSearch(a,0,N-1,x); if (pos!=-1) printf("a[%d]=%d\n",pos,x); else printf("Not found!\n"); return 0; }
/* 已知带头结点的单链表结构定义同实验3,假设链表中所有结点值均不相同, 请编写一个递归函数linklist max(linklist head),返回表中最大数所在的结点地址,若链表为空,返回NULL。 */ #include "slnklist.h" /*请将本函数补充完整,并进行测试*/ linklist max(linklist head) { linklist p,q; if(!head->next) return NULL; else if(!head->next->next) return head->next; else { p=max(head->next); if(head->next->info > p->info) return head->next; return p; } } int main() { linklist head,p; head=creatbyqueue(); print(head); p=max(head); if (p) printf("max=%d\n",p->info); else printf("链表为空\n"); return 0; }
作者:木子欢儿
出处:https://www.cnblogs.com/HGNET/p/14109649.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
部分文章来源于网络,如疏漏未标注原文地址或侵权,请联系进行删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· .NET 阻止Windows关机以及阻止失败的一些原因
· 博客园2025新款「AI繁忙」系列T恤上架
· Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)
· C# LINQ 快速入门实战指南,建议收藏学习!
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
2019-12-09 Python中68个内置函数的总结
2019-12-09 【Python】变量命名习惯
2019-12-09 【Python】 基础语法
2019-12-09 【Python】 注释