C语言程序设计进阶-逆序输出

it2025-11-06  12

题目内容:

你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-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; }
最新回复(0)