习题-算法设计-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 @ 2021-10-19 19:13  taotooler  阅读(13)  评论(0)    收藏  举报  来源