zoukankan      html  css  js  c++  java
  • 基础实验4-2.5 关于堆的判断 (25分)---建小顶堆

     解题思路:

    1、边输入边建小顶堆(下标从1开始)

    2、判断

         1)、根结点则下标为1

         2)、若为兄弟结点,则两者双亲结点相同

         3)、儿子结点下标/2=双亲结点下标(注意:用 ‘/‘ 不用 ’*‘)

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #define Max 1010
    int arr[2]= {0};
    int n,m;
    void Adjust(int a[],int k,int n) {//向下调整堆
    	a[0]=a[k];
    	int i;
    	for(i=2*k; i<=n; i*=2) {
    		if(i<n&&a[i]>a[i+1])
    			i++;
    		if(a[0]<=a[i])break;
    		else {
    			a[k]=a[i];
    			k=i;
    		}
    	}
    	a[k]=a[0];
    }
    void BuildHeap(int a[],int n) {//建小顶堆
    	int i;
    	for(i=n/2; i>0; i--) {
    		Adjust(a,i,n);
    	}
    }
    int find(int tmp,int a[]) {//获取下标
    	int i;
    	for(i=1; i<=n; i++) {
    		if(a[i]==tmp) {
    			return i;
    		}
    	}
        return -1;
    }
    void Out(int tag,int a[]) {//判断命题
    	int i;
    	int flag=0;
    	if(tag==1) {
    		if(find(arr[0],a)==1)
    			flag=1;
    	} else if(tag==2) {
    		if(find(arr[0],a)/2==find(arr[1],a)/2)
    			flag=1;
    	} else if(tag==3) {
    		if(find(arr[1],a)/2==find(arr[0],a))
    			flag=1;
    	} else if(tag==4) {
    		if(find(arr[1],a)==find(arr[0],a)/2)
    			flag=1;
    	}
    	printf("%c
    ",flag?'T':'F');
    }
    
    int main() {
    
    	scanf("%d %d",&n,&m);
    	int * a=(int *)malloc(sizeof(int)*Max);
    	int i;
    	for(i=1; i<=n; i++) {
    		scanf("%d",&a[i]);
    		BuildHeap(a,i);
    	}
    	char c[10],c1[10],c2[10];
    	int tag;
    	for(i=0; i<m; i++) {//字符处理
    		scanf("%d %s",&arr[0],&c);
    		if(!strcmp(c,"and")) {
    			tag=2;
    			scanf("%d %s%s",&arr[1],&c1,&c2);
    			Out(tag,a);
    			continue;
    		}
    		scanf("%s",&c);
    		if(!strcmp(c,"a")) {
    			tag=4;
    			scanf("%s%s%d",&c1,&c2,&arr[1]);
    			Out(tag,a);
    			continue;
    		}
    		scanf("%s",&c);
    		if(!strcmp(c,"parent")) {
    			tag=3;
    			scanf("%s%d",&c1,&arr[1]);
    			Out(tag,a);
    
    			continue;
    		}
    		if(!strcmp(c,"root")) {
    			tag=1;
    			Out(tag,a);
    			continue;
    		}
    
    	}
    	return 0;
    }
    

      

    勤能补拙,熟能生巧
  • 相关阅读:
    纪伯伦:我曾七次鄙视我的灵魂
    字典和集合
    元组
    列表
    字符串
    数值类型
    内置函数了解一下
    了解Python
    centos7安装mysql数据库
    xenserver 上传centos6.8镜像
  • 原文地址:https://www.cnblogs.com/snzhong/p/12448202.html
Copyright © 2011-2022 走看看