プロが教えるわが家の防犯対策術!

c言語の問題です

課題1
(二分探索木とセット)
大きさ size の配列 array を考える。すなわち、各要素値 array[i]に対し、2*i+1<size ならば array[i]<array[2*i+1]となり、2*i+2<size ならば array[i]<array[2*i+2]となるような データ格納を考える。
#include <stdio.h>
#include <stdlib.h>
void printArray(int *array, int size);
void swap(int *array, int i, int j);
void heapUp(int *array, int i);
void heapDown(int *array, int i, int size);
int main(void){
int data[] = {8, 98, 87, 36, 35, 54, 11, 33, 6, 79}, size = 10; int *array, i;
array = (int *) malloc(sizeof(int)*size);
for(i = 0; i < size; i++){
array[i] = data[i];
heapUp(array, i);
}
printArray(array, size);
// array[0] = array[--size];
// heapDown(array, 0, size);
// printArray(array, size); return 0;
}
void printArray(int *array, int size){
int i;
for (i = 0; i < size; i++)
printf("%2d%c", array[i], i == size-1 ? '\n': ' '); }
void swap(int *array, int i, int j){ int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
void heapUp(int *array, int i){

j=2*i+1 または j=2*i+2 ならば、i は(j-1)/2 で求まる

}
void heapDown(int *array, int i, int size){
}

heapUp関数とheapDown関数のところがわからないので教えていただきたいです
heapUpは配列 array の要素値を入れ替える関数である。
配列 data[i]に格納されている要素値を配列 array[i]へ順次格納する。

[実行例]
$ ./a.exe
6 8 11 33 36 87 54 98 35 79
$

heapDownはmain 関数内のコメントアウトを削除し、array[0]の値を array[size-1]に、size を size-1 に 置き換える。heapDownは置き換えられたれた array[0]の値を入れ替える関数 )

[実行例]
$ ./a.exe
6 8 11 33 36 87 54 98 35 79
8 33 11 35 36 87 54 98 79
$

A 回答 (2件)

・どのようにデータを格納しているのか図示できる?


・どのように動作すればいいのか理解できる?
・そもそも「二分探索木とセット」がどこにも関係しないことは認識できてる?
    • good
    • 0

簡単な問題ですが、どこまでできてどこがわからないのか記載してもらわないと回答しようがありませんよ。

    • good
    • 4
この回答へのお礼

解答ありがとうございます!
自分の理解不足でどのように書けばいいのか全くわからないです。
本や資料を読んでいるのですが、どう書けば良いのかわからずという状況です。
もしよろしければ1から解き方や書き方を教えていただきたいです

お礼日時:2023/01/11 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!