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

浙公网安备 33010602011771号