C语言实验——数组逆序
Time Limit: 1000MS Memory limit: 65536K
题目描述
有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m < n < 100)个位置。
输入
输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。
输出
按先后顺序输出n个整数。
示例输入
5 1 2 3 4 5
2
示例输出
4 5 1 2 3
-
这个是比较简单的一道题吧,不过现在正在学数据结构,于是这道题也用栈做了一遍
<div style="text-align: justify;">#include<stdio.h> #include<stdlib.h> #define stackmax 1000 #define stacknum 1000 typedef struct { int *top; int *base; int stacksize; }stack; int initstack(stack &s) { s.base = (int *)malloc(stackmax*sizeof(int)); if(!s.base) exit(-1); s.top = s.base; s.stacksize = stackmax; return 0; } void push(stack &s,int e) { if(s.top - s.base >= s.stacksize) { s.base = (int *)realloc(s.base,(stacknum + s.stacksize)*sizeof(int)); if(!s.base) exit(-1); s.top = s.base + s.stacksize; s.stacksize += stacknum; } s.top++; *s.top = e; } void pop(stack &s) { printf("%d ",*s.top); s.top--; } void inverse(int a[],int n,int m) { stack s; initstack(s); for(int i = 1;i <= m;i++) { push(s,a[n-i]); } for(int i = 0;i < m;i++) { pop(s); } for(int i = 0;i < n-m-1;i++) { printf("%d ",a[i]); } printf("%d\n",a[n-m-1]); } int main() { int n,m; int a[100]; scanf("%d",&n); for(int i = 0;i < n;i++) scanf("%d",&a[i]); scanf("%d",&m); if(m == n) { for(int i = 0;i < n-1;i++) printf("%d ",a[i]); printf("%d",a[n-1]); } else inverse(a,n,m); return 0; } </div>