考虑一个具有以下属性的动态表:
- 元素存储在动态数组中
- 容量是动态数组的大小
- 大小定义为存储在数组中的元素个数
将元素插入此动态表中。如果大小等于 push_back() 之前的容量,则容量加倍
不要使用 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