動的配列によるヒープの実現がしたいです
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#define INIARRYSIZE 1 5int* pA; 6int sA; 7int size; 8 9void create() 10{ 11 sA = INIARRYSIZE; 12 if((pA = (int*)malloc(sizeof(int)*sA))==0) exit(1); 13 size=0; 14} 15 16void insert(int x) 17{ 18 if(size==sA-1) 19 { 20 int* oldpA = pA; 21 sA = sA*2; 22 if((pA=(int*)malloc(sizeof(int)*sA))==0) exit(1); 23 memcpy(pA, oldpA, sizeof(int)*(size+1)); 24 free(oldpA); 25 } 26 size++; 27 ... 28}
困っていること
プログラム内でsize++
の後に配列に要素を格納したいのですが
pA[size]=x;
では駄目なのでしょうか
※追記
ヒープは2分木という意味合いもありました。度々すいません
「ヒープ」はメモリ領域としての意味合いでしょうか、二分木という意味合いでしょうか(2つの意味があって、どちらをしたいのかが判然としない状況です)。
このコードはなにをしている(つもり)んでしょうか
プログラムの実行中に配列のサイズが足りなくなったときにサイズを追加していくというプログラムです
自分が書いたものではないプログラムの意味がわからないので教えてほしいという質問でしょうか?
そうですね。
insert()での配列への仕方が知れれば嬉しいです
ヒープじゃなくてリストでは?
いや、maisumakun さんが当たりかも。ヒープからメモリを確保するリストですかね。
知恵袋を見る限り「動的に大きさを変えられる配列を使って」「二分木の方のヒープを実装せよ」という課題のようですね。
配列が何かもわかってないような人には無理な課題です。どうしてこんな課題を出されたのかわかりませんが、教師に言って課題を替えてもらってください。
配列に要素を代入するときにどのように書けば良いのか知れれば良いのですが...
ヒープへの挿入はただの挿入ではないので、授業を聞いてなかった人には説明しても理解できないと思います。
size++;
pA[size]=x;
では適切に代入できないということでしょうか

回答2件
あなたの回答
tips
プレビュー