习题-算法设计-2013
1,请写出起泡法排序的算法。
分析:起泡法是以从小到大排序,故而只需进行条件判断当前元素跟下一个元素大小,把小的元素排到前面即可。
算法设计:
//伪代码 void BubbleSort(int A[],int n){ int i,flag,j,temp; for(i=0;i<n;i++) { flag=0; for(j=1;j=n-1;j++){ if(A[j-1]>A[j]) { //交换j-1与j元素的值 temp=A[j-1];//temp临时存储j-1的值; A[j-1]=A[j}; A[j]=temp; flag=1;//标记 } } if(flag==0) return ; } }
2. 设计一个算法将无向图的邻接矩阵转换为对应的邻接表的算法
分析:
1 首先 复习一下邻接矩阵和邻接表的相关知识:
1-1:邻接矩阵:
邻接矩阵是用一个一位数组来存储图中顶点信息,用一个二位数组来存储图中边的信息(各个顶点之间的邻接关系),而存储顶点之间邻接关系的矩阵称为邻接矩阵。
一个无向图➡️
其表示的邻接矩阵⬇️
关于邻接表:请观看王道数据P217页
思想分析:
题目的关于无向图的,由于无向图的出度和入度相等,故而可以直接操作遍历完整个邻接矩阵;
算法设计:
void transform(MGraph *M,ALGraph *A) { int i,j; ArcNode *r,*s; A->arcnum=M->arcnum; A->vexnum=M->vexnum; for ( i = 0; i < M->vexnum; i++) { A->vertices[i].data=i; A->vertices[i].first=NULL; } for ( i = 0; i < M->vexnum; i++) { for ( j = 0; j < M->vexnum; j++) { if (M->Edge[i][j]!=0) { if (A->vertices[i].first==NULL) { r=(ArcNode *)malloc(sizeof(ArcNode)); r->adjvex=j; A->vertices[i].first=r; } else { s=(ArcNode *)malloc(sizeof(ArcNode)); s->adjvex=j; r->next=s; r=s; } } } r->next=NULL; } }
4,用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串"486"。n的位数不确定,可以是任意位数的整数。
c语言代码如下⬇️:
#include <stdio.h> #include<string.h> char result[100]; int length=0; int main() { int num; scanf("%d",&num); if(num<0) { num=-num; result[length++]='-'; } void resverse(int num) { int each; if(num==0) return; else { each=num%10; num=num/10; result[length++]=each+'0'; resverse(num); } } resverse(num); result[length]='\0'; printf("%s",result); }
本文来自博客园,作者:taotooler,转载请注明原文链接:https://www.cnblogs.com/taolo/p/17225890.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?