您的位置:首页 > 编程语言 > C语言/C++

C语言实验——数组逆序

2016-08-02 09:53 706 查看


C语言实验——数组逆序



Time Limit: 1000MS Memory limit: 65536K


题目描述

有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m < n < 100)个位置。


输入

输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。


输出

按先后顺序输出n个整数。


示例输入

5 1 2 3 4 52


示例输出

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 编码