L2-012. 关于堆的判断
Posted diamondDemand
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-012. 关于堆的判断相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <stdlib.h> #include <string> #include <vector> #include <stdio.h> #include <string.h> using namespace std; typedef struct HeapStruct *MinHeap; typedef int ElementType; struct HeapStruct { ElementType *ele; int size; //当前元素个数 int capacity; //最大容量 }; MinHeap createHeap(int MaxSize) { MinHeap heap = (MinHeap)malloc(sizeof(struct HeapStruct)); heap->ele = (ElementType*)malloc((MaxSize+2)*sizeof(ElementType)); //sometimes +1 is not stable heap->size = 0; heap->capacity = MaxSize; heap->ele[0] = -100000; //sentinel, a number less than all elements return heap; } bool IsFull(MinHeap heap) { if(heap->size==heap->capacity) return true; else return false; } void Insert(MinHeap heap, ElementType item) { int i; if(IsFull(heap)) //if heap is full, insert is failed { cout << "the heap is full"; return; } i = ++heap->size; for(; heap->ele[i/2] > item; i/=2) heap->ele[i] = heap->ele[i/2]; heap->ele[i] = item; } int main() { int n, m; cin >> n >> m; MinHeap heap = createHeap(n); int temp; for(int i=1; i<=n; i++) { cin >> temp; Insert(heap, temp); } char str[40]; int temp1, temp2, a, b; for(int i=0; i<m; i++) { cin >> temp1 >> str; if(strcmp(str, "and")==0) { cin >> temp2 >> str >> str; a = -1, b = -1; for(int i=1; i<=heap->size; i++) { if(heap->ele[i]==temp1) a = i; if(heap->ele[i]==temp2) b = i; } if(a>b) swap(a, b); if(a%2==0&&b-a==1) cout << "T" << endl; else cout << "F" << endl; } else { cin >> str; if(strcmp(str, "a")==0) { cin >> str >> str >> temp2; a = -1, b = -1; for(int i=1; i<=heap->size; i++) { if(heap->ele[i]==temp1) a = i; if(heap->ele[i]==temp2) b = i; } if(b==a/2) cout << "T" << endl; else cout << "F" << endl; } else { cin >> str; if(strcmp(str, "root")==0) { if(temp1==heap->ele[1]) cout << "T" << endl; else cout << "F\n"; } else { cin >> str >> temp2; a = -1, b = -1; for(int i=1; i<=heap->size; i++) { if(heap->ele[i]==temp1) a = i; if(heap->ele[i]==temp2) b = i; } if(a == b/2) cout << "T\n"; else cout << "F\n"; } } } } return 0; }
以上是关于L2-012. 关于堆的判断的主要内容,如果未能解决你的问题,请参考以下文章