C语言实验——数组逆序

来源:互联网 发布:淘宝有月销量但没评价 编辑:程序博客网 时间:2024/05/06 09:36

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

 

 

 

#include <stdio.h>
#include <stdlib.h>
#define stackmax 10000
#define stacknum 10000
typedef int ElemType;
typedef struct
{
    ElemType *base;
    ElemType *top;
    int stacksize;
} SqStack;
int InitStack(SqStack &s)
{
    s.base = (ElemType*) malloc (stackmax*sizeof(ElemType));
    if (! s.base)
        exit(0);
    s.top = s.base;
    s.stacksize = stackmax;
    return 0;
}
int Push(SqStack &s , int e)
{
    if(s.top-s.base >= s.stacksize)
    {
        s.base = (ElemType *)realloc(s.base,(s.stacksize+stacknum)*sizeof(ElemType));
        if (! s.base ) exit(0);
        s.top = s.base + s.stacksize;
        s.stacksize += stacknum;
    }
    *s.top++=e;
}


int  Pop(SqStack &s)
{
    if(s.top == s.base)   return 0;
    s.top--;
    return 1;
}

int GetTop(SqStack &s)
{
    if(s.top == s.base)   return 0;
    int e=*(s.top-1);
    return e;
}

int StackEmpty(SqStack &s)
{
    if(s.top == s.base)
        return 1;
    else
        return 0;
}

void putstack(SqStack &s)
{
    while(s.top > s.base)
    {
        printf("%d ", *(s.top-1));
        s.top--;
    }
}

int Swap(SqStack &s, int a[], int n, int m)
{
    int i;
    for(i=n-m-1; i>=0; i--)
        Push(s, a[i]);
    for(i=n-1; i>=n-m; i--)
        Push(s, a[i]);
}

int main()
{
    SqStack s;
    int n, i, a[110], m;
    scanf("%d", &n);
    for(i=0; i<n; i++)
    scanf("%d", &a[i]);
    scanf("%d", &m);
    InitStack(s);
    Swap(s, a, n, m);
    putstack(s);
    return 0;
}

0 0