次のプロパティを持つ動的テーブルを検討してください。
- 要素は動的配列に格納されます
- 容量は動的配列のサイズです
- サイズが定義されているのは、配列に格納されている要素の数です
この動的テーブルに要素を挿入します。サイズが push_back() の前の容量と等しい場合、2 倍の容量
malloc または calloc 関数を使用しないでください。
入力: (n, 要素)
9
6 7 8 12 4 10 11 1 15
出力:
容量 = 1; サイズ = 1; 要素 = 6
容量 = 2; サイズ = 2; 要素 = 6 7
容量 = 4; サイズ = 3; 要素 = 6 7 8
容量 = 4; サイズ = 4; 要素 = 6 7 8 12
容量 = 8; サイズ = 5; 要素 = 6 7 8 12 4
容量 = 8; サイズ = 6; 要素 = 6 7 8 12 4 10
容量 = 8; サイズ = 7; 要素 = 6 7 8 12 4 10 11
容量 = 8; サイズ = 8; 要素 = 6 7 8 12 4 10 11 1
容量 = 16; サイズ = 9; 要素 = 6 7 8 12 4 10 11 1 15
#include <stdio.h>
int size=0;
int capacity=0;
int * double_capacity(int *a) {
int l=0;
if(capacity==0) capacity++;
capacity=capacity*2;
int b[capacity];
for(l;l<size;l++){
//printf("%d : %d \n",l,a[l]);
b[l]=a[l];
}
return b;
}
int * push_back(int *a,int j) {
if(size==capacity)
a=double_capacity(a);
a[size]=j;
size++;
int k=0;
printf("capacity = %d; size = %d; elements = ",capacity,size);
for(k=0;k<size;k++) {
printf(" %d",*(a+k));
}
printf("\n");
return a;
}
main() {
int *a;
int n,i,j,k,l;
scanf("%d",&n);
int temp[n];
for(i=0; i<n; i++) {
scanf("%d",&temp[i]);
}
for(i=0; i<n; i++) {
a=push_back(a,temp[i]);
}
}
\temp.c: In function 'double_capacity':
temp.c:16:2: warning: function returns address of local variable [-Wreturn-local-addr]
return b;のようなコンパイル エラーが表示されます。
^
これを実行しても
入力を与えたとき
3 3 2 1
出力
容量 = 1; サイズ = 1; 要素 = 3
容量 = 2; サイズ = 2; 要素 = 3 2
容量 = 4; サイズ = 3; 要素 = 3 2 1
入力を与えたとき
5 5 4 3 2 1
出力
容量 = 1; サイズ = 1; 要素 = 5
容量 = 2; サイズ = 2; 要素 = 5 4
容量 = 4; サイズ = 3; 要素 = 5 4 3
容量 = 4; サイズ = 4; 要素 = 0 0 -2128976676 2
容量 = 8; サイズ = 5; 要素 = 0 0 -2128976676 32524 1