习题-算法设计-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);
}

 

posted @   taotooler  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示