7-1 关于堆的判断 (25 分)

大一下半期数据结构

关于堆的判断

将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:

  • x is the rootx是根结点;
  • x and y are siblingsxy是兄弟结点;
  • x is the parent of yxy的父结点;
  • x is a child of yxy的一个子结点。
  • 输入格式:
  • 每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被插入一个初始为空的小顶堆的整数。之后M行,每行给出一个命题。题目保证命题中的结点键值都是存在的。
  • 输出格式:
  • 对输入的每个命题,如果其为真,则在一行中输出T,否则输出F
  • 输入样例:
  • 5 4
    46 23 26 24 10
    24 is the root
    26 and 23 are siblings
    46 is the parent of 23
    23 is a child of 10
    输出样例:
  • F
    T
    F
    T

    题目解答:

  • #include<stdio.h>
    #include<string.h>
    int a[100000]={0},n,m;
    int Insert (int i);
    int zhaobaba (int s);
    
    int main(void) {
    	int i,x,y;
    	char str1[100],str2[100],str3[100],str4[100];
    	scanf ("%d %d",&n,&m);
    	for (i=1;i<=n;i++) {
    		scanf ("%d",&a[i]);
    		if (i!=1)  Insert (i);
    	}
    	getchar ();
    	for (i=0;i<m;i++) {
    		scanf ("%d %s",&x,str1);
    		if (strcmp (str1,"and")==0) {
    			scanf ("%d %s %s",&y,str2,str3);
    		if (zhaobaba (x)==zhaobaba(y)) printf ("T\n");
    		else printf ("F\n");
    		}
    		else {
    			scanf ("%s %s",str2,str3);
    			if (strcmp (str3,"root")==0) {
    				if (x==a[1]) printf ("T\n");
    				else printf ("F\n");
    			}
    			else if (strcmp (str3,"parent")==0) {
    				scanf ("%s %d",str4,&y);
    				if (zhaobaba (y)==x) printf ("T\n");
    				else printf ("F\n");
    			}
    			else {
    				scanf ("%s %d",str4,&y);
    				if (zhaobaba (x)==y)  printf ("T\n");
    				else printf ("F\n");
    			}
    		}
    	}
    	return 0;
    } 
    int Insert (int i) {
    	int item;
    	while (1) {
    		if (i==1) break;
    		else if (a[i]<a[i/2]) {
    			item = a[i];
    			a[i] = a[i/2];
    			a[i/2] = item;
    			i = i/2;
    		}
    		else break;
    	}
    }
    int zhaobaba (int s) {
    	int i;
    	for (i=1;i<=n;i++) {
    		if (a[i]==s) break;
    	}
    	return a[i/2];
    }
    
发布了47 篇原创文章 · 获赞 12 · 访问量 7248

猜你喜欢

转载自blog.csdn.net/weixin_43717681/article/details/89646797