题目内容:
你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。
输入格式:
一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。 输出格式: 按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。 输入样例: 1 2 3 4 -1 输出样例: 4 3 2 1
可变数组
#include<stdio.h>
#include<stdlib.h>
const int BLOCK_SIZE
= 5;
typedef struct{
int* array
;
int size
;
}Array
;
Array
array_create(int init_size
);
int array_size(Array
*a
);
void array_inflate(Array
*a
,int more_size
);
void array_free(Array
*a
);
Array
array_create(int init_size
){
Array a
;
a
.size
= init_size
;
a
.array
= (int*)malloc(sizeof(int)*a
.size
) ;
return a
;
}
int array_size(Array
*a
)
{
return a
->size
;
}
void array_inflate(Array
*a
,int more_size
)
{
int *p
= (int *)malloc(sizeof(int)*(a
->size
+more_size
));
int i
=0;
for(i
;i
<a
->size
;i
++)
{
p
[i
] = a
->array
[i
];
}
free(a
->array
);
a
->array
= p
;
a
->size
+=more_size
;
}
void array_free(Array
*a
)
{
free(a
->array
);
a
->array
= 0;
a
->size
= 0;
}
int* array_at(Array
*a
,int index
)
{
if(a
->size
<=index
)
array_inflate(a
,(index
/BLOCK_SIZE
+1)*BLOCK_SIZE
-a
->size
);
return &(a
->array
[index
]);
}
int main()
{
Array a
=array_create(2);
printf("%d",array_size(&a
));
int cnt
= 0,num
;
scanf("%d",&num
);
while(num
!= -1)
{
*array_at(&a
,cnt
) = num
;
scanf("%d",&num
);
cnt
++;
}
cnt
--;
while(cnt
>=0)
{
printf("%d ",a
.array
[cnt
]);
cnt
--;
}
return 0;
}
链表
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
int value
;
struct _node
*next
;
}Node
;
int main(){
int num
,cnt
=0;
Node
*head
= NULL,*p
= NULL;
scanf("%d",&num
);
while(num
!= -1)
{
p
= (Node
*)malloc(sizeof(Node
));
p
->value
= num
;
if(cnt
==0){
p
->next
= NULL;
}
else{
p
->next
= head
;
}
head
= p
;
cnt
++;
scanf("%d",&num
);
}
while(p
){
printf("%d ",p
->value
);
p
= p
->next
;
}
return 0;
}