ヒープのデータの挿入
Posted: 2011年9月05日(月) 22:23
大学で勉強した課題を復習して、わからない問題があったのでおしえてください
windows7を使っています。
ヒープに新たなデータを挿入する関数insertを作成する課題で、
空の配列に複数回insertを行うことで構成したヒープがヒープ条件を満たしていることを
確認する問題です。
わからない所は、
insert(100,s,&MAX); にすると lvalue required as unary '&' operand というエラーが出て、どう直せばいいのかわからないこと
a[MAX] = val; で、array subscript is not an integer というエラーが出ることです。a[MAX]に値が入ってないからってエラーが出る意味がわかりません。
回答よろしくおねがいします
<エラーコード>
# gcc 3-10.c
3-10.c: In function 'main':
3-10.c:51:4: error: lvalue required as unary '&' operand
3-10.c: In function 'insert':
3-10.c:77:4: error: array subscript is not an integer
windows7を使っています。
ヒープに新たなデータを挿入する関数insertを作成する課題で、
空の配列に複数回insertを行うことで構成したヒープがヒープ条件を満たしていることを
確認する問題です。
わからない所は、
insert(100,s,&MAX); にすると lvalue required as unary '&' operand というエラーが出て、どう直せばいいのかわからないこと
a[MAX] = val; で、array subscript is not an integer というエラーが出ることです。a[MAX]に値が入ってないからってエラーが出る意味がわかりません。
回答よろしくおねがいします
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 11
int check_heap(int a[],int N);
void insert(int val,int a[],int *);
int main(){
FILE *fp;
int i,j,temp,num;
int s[MAX];
//ファイル読み込み
if( (fp=fopen("numbers.dat","r")) == NULL){
printf("file open errpr!\n");
exit(0);
}
for(i=0;i<10; i++){
fscanf(fp,"%d",&s[i]);
}
if(1 == check_heap(s,MAX))
printf("correct!\n");
else
printf("difference!\n");
printf("--------------\n");
//sort
for(i=0; i<MAX; i++){
j=i;
for(j=i; j< MAX;j++){
if(s[i] > s[j+1]){
temp = s[i];
s[i] = s[j+1];
s[j+1] = temp;
}
}
}
//check
if(1 == check_heap(s,MAX))
printf("correct!\n");
else
printf("difference!\n");
//表示
for(i=0;i<MAX; i++){
printf("%d ",s[i]);
}
//---------------------------
//100を追加
insert(100,s,&MAX); //*********************************************
//check
if(1 == check_heap(s,MAX))
printf("correct!\n");
else
printf("difference!\n");
//表示
for(i=0;i<10; i++){
printf("%d ",s[i]);
}
return 0;
}
int check_heap(int a[],int N){
int i;
for(i=0;i<N; i++){
if(a[i] > a[2*(i+1)] && a[i] > a[2*(i+2)] )
return 0;
}
return 1;
}
void insert(int val,int a[],int *N){
int i,temp;
N++;
a[MAX] = val; //***********************************
i = 0;
while((i-1)/2 <=0){
if(a[i] < a[(i-1)/2]){
temp = a[i];
a[i] = a[(i-1)/2];
a[(i-1)/2] = temp;
i = (i-1)/2;//shift up
}
else
break;
}
}
# gcc 3-10.c
3-10.c: In function 'main':
3-10.c:51:4: error: lvalue required as unary '&' operand
3-10.c: In function 'insert':
3-10.c:77:4: error: array subscript is not an integer