【趣学C语言和数据结构100例】

【趣学C语言和数据结构100例】

问题描述

91.堆排序算法

92.归并排序

93.设计一个完整的 C 语言程序。要求完成以下功能:从低值开始取出长整型变量 s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为 7654321 时,得到结果为 642.

94.实现计算:有 80 工人,每个工人包括的信息有:工号,名字,三个月的收入以及平均收入。用函数(1)完成工人信息的输入,并计算其平均收入。(2)用冒泡排序法排序工人平均收入。(3)完成工人信息的输出。

95.试设计一个算法,判断一个无向图 G是否为一棵树。若是一棵树,则算法返回 true,否则返回 false。

代码分析

86.堆排序
算法步骤:
1.建堆: 将输入数组构建成最大堆。这可以通过从数组的最后一个非叶子节点开始,自底向上地进行“向下调整”(heapify)操作来实现。向下调整操作确保每个节点都满足最大堆性质。
2.排序: 重复执行以下步骤,直到堆为空:
将堆顶元素(最大元素)与堆的最后一个元素交换。
将堆的大小减 1(因为最大元素已在正确的位置)。
对新的堆顶元素进行向下调整,以维护最大堆性质。

87.归并排序
归并排序是一种基于分治策略的排序算法。其基本思想是:
分治 (Divide): 将待排序的数组递归地分成两个子数组,直到每个子数组只包含一个元素(此时子数组已排序)。
合并 (Conquer): 将两个已排序的子数组合并成一个更大的已排序数组。 合并操作的关键在于比较两个子数组的第一个元素,将较小的元素放入新的数组中,然后继续比较下一个元素,直到所有元素都被合并到新的数组中。
递归 (Recurse): 重复步骤 1 和 2,直到所有子数组都被合并成一个完整的已排序数组。

88.从低值开始取出长整型变量 s中偶数位上的数
使用了一个 while 循环来迭代处理 s 中的每一位数字。 它通过取模运算 (% 10) 获取最后一位数字,然后通过除法运算 (/ 10) 去除最后一位数字。 它使用一个 multiplier 变量来正确地构建新数 t。 if 语句确保只处理偶数位数字。 temp 变量用于避免修改原始的 s 值。 代码还添加了对只有一位数和奇数位数情况的处理。

89.冒泡排序

90.无向图 G是否为一棵树
分析:
1.判断有没有环
2.广度优先搜索 从任意一个顶点开始BFS遍历图。 记录访问过的顶点数量Vnum和经过的边的数量Enum。 如果BFS遍历结束后,访问过的顶点数量等于图中顶点的总数,并且经过的边的数量等于顶点总数减一(因为树是一个没有环的连通图,边的数量总是顶点数减一),则图是一棵树。

代码实现

#include<stdio.h>
#define N 80
typedef struct worker{
    
    
	char num[10];
	char name[10];
	float money[3];
	float avg;
}worker;
worker wk[N];
void fun1(worker wk[]){
    
    
	float sum=0;
	for(int i=0;i<N;i++){
    
    
		scanf("%s %s %f %f %f",&wk[i].num,&wk[i].name,&wk[i].money[0],&wk[i].money[1],&wk[i].money[2]);
		wk[i].avg= (wk[i].money[0]+wk[i].money[1]+wk[i].money[2])/3.0;
		sum=0;
	}	
}

void fun2(worker wk[]){
    
    
	for(int i=0;i<N-1;i++){
    
    
		bool flag=false;
		for(int j=N-1;i<j;j--){
    
    
			if(wk[j].avg<wk[j-1].avg){
    
    
				int temp=wk[j].avg;
				wk[j].avg=wk[j-1].avg;
				wk[j-1].avg=wk[j].avg;
				flag=true;
			}
			if(flag==false){
    
    
				return;
			}
		}
	}	
}

void fun3(worker wk[]){
    
    
	for(int i=0;i<N;i++){
    
    
		printf("%s %s %f %f %f",wk[i].num,wk[i].name,wk[i].money[0],wk[i].money[1],wk[i].money[2],wk[i].avg);
	}	
}

int main(){
    
    
//	91.堆排序算法   完全二叉树  k  2k  2k+1 
void HeadAjust(int a[],int k,int len){
    
    
	a[0]=a[k];
	for(int i=2*k;i<len;i){
    
    
		if(a[i]<a[i+1] && i<len){
    
    
			i++;
		}
		if(a[0]>a[i]){
    
    
			break;
		}else{
    
    
			a[k]=a[i];
			k=i;
		}
	}
	a[k]=a[0];
}
void BridMaxheap(ElemType[],int len){
    
    
	for(int i=len/2;i>0;i--){
    
    
		HeadAjust(A,i,len)
	}
}

//	92.归并排序
void merge(int A,int low,int mid,int high){
    
    
	int *b=(int *)malloc((high-low+1)*sizeof(int));
	for(int k=low;k<=high;k++){
    
    
		b[k]=a[k];
	}
	for(int i=low,i=mid+1,k=low;i<=mid && j<=high;){
    
    
		if(b[i]<=b[j]){
    
    
			a[k++]=b[i++];
		}else{
    
    
			a[k++]=b[j++];
		}
	}
	while(i<=mid){
    
    
		a[k++]=b[i++];
	}
	while(j<=high){
    
    
		a[k++]=b[j++];
	}
}

//	93.设计一个完整的 C 语言程序。要求完成以下功能:从低值开始取出长整型变量 s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为 7654321 时,得到结果为 642.
void fun(long s,long *t){
    
    
	s=s/10;
	*t=s%100;
	long s1=10while(s>=100){
    
    
		s=s/100;
		*t=s%10*s1+*t;
		s1=s1*10;
	}	
}

//	实现计算:94.有 80 工人,每个工人包括的信息有:工号,名字,三个月的收入以及平均收入。用函数(1)完成工人信息的输入,并计算其平均收入。(2)用冒泡排序法排序工人平均收入。(3)完成工人信息的输出。
fun1();
fun2();
fun3();

//	95.试设计一个算法,判断一个无向图 G是否为一棵树。若是一棵树,则算法返回 true,否则返回 false。
//1.判断有没有环
//2.广度优先搜索 从任意一个顶点开始BFS遍历图。 记录访问过的顶点数量Vnum和经过的边的数量Enum。  如果BFS遍历结束后,访问过的顶点数量等于图中顶点的总数,并且经过的边的数量等于顶点总数减一(因为树是一个没有环的连通图,边的数量总是顶点数减一),则图是一棵树。
bool istree(Graph G){
    
    
	bool visited[G.vexunm];
	for(int i=0;i<G.vexnum;i++){
    
    
		visited[i]=false;
	}
	int Vnum=0,Vnum=0;
	BFS(G,0,visited,Vnum,Enum);
	if(Vnum=G.vexnum && Enum=G.vexnum-1){
    
    
		return true;
	}else{
    
    
		return false;
	}
} 
BFS(Graph G,int u,bool visited,int &Vnum,int &Enum){
    
    
	Vnum++;
	visited[u]=true;
	Inqueue(Q);
	ENqueue(Q,u);
	while(!isEmpty(Q)){
    
    
		DeQueue(Q,u);
		for(int w=FirstNeihbor(Q,u);w>=0){
    
    
			w=NextNeihbor;
			if(!visited[w]){
    
    
				Vnum++;
				Enum++;
				visited[w]=true;
				Enqueue(Q,w);
			}
		}
	}
}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/lwcwam/article/details/143311182