逆序输出
程序员文章站
2022-03-22 08:09:28
...
题目内容:
你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。
输入格式:
一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。
输出格式:
按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。
输入样例:
1 2 3 4 -1
输出样例:
4 3 2 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLOCK_SIZE 20
typedef struct{
int *array;
int size;
} Array;
Array array_create( int init_size );
void array_free( Array *a );
int *array_at( Array *a,int index );
void array_inflate( Array *a,int more_size );
Array array_create( int init_size )
{
Array a;
a.size = init_size;
a.array = (int *)malloc(sizeof(int)*a.size);
return a;
}
void array_free( Array *a )
{
free(a->array);
a->array = NULL;
a->size = 0;
}
int *array_at( Array *a,int index )
{
if( index >= a->size ){
array_inflate(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);
}
return &(a->array[index]);
}
void array_inflate( Array *a,int more_size )
{
int *p = (int *)malloc(sizeof(int)*(a->size+more_size));
// for( int i=0; i<a->size; i++ ){
// p[i] = a->array[i];
// }
memcpy((void *)p,(void *)a->array,a->size*sizeof(int));
free(a->array);
a->array = p;
a->size += more_size;
}
int main()
{
Array a = array_create(BLOCK_SIZE);
int number = 0;
int cnt = 0;
while( number != -1){
scanf("%d",&number);
if( number != -1 )
*array_at(&a,cnt++) = number;
}
while( --cnt != -1){
printf("%d ",*array_at(&a,cnt));
}
array_free(&a);
return 0;
}
上一篇: 将军威武什么手机能玩 适配手机型号一览表
下一篇: 设计模式--模板方法模式