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

C语言实验——数组逆序

2016-08-11 20:05 886 查看


题目描述

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


输入

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


输出

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


示例输入

5 1 2 3 4 5
2



示例输出

4 5 1 2 3

#include <iostream>

#include <cstring>

#include <cstdlib>

#include <cstdio>

using namespace std;

const int  maxsize = 10000;

typedef int elemtype;

typedef struct Stack

{

    int Size;

    elemtype *top,*base;

} Stack;

bool Empty(Stack &s)//判断是否为空栈;

{

    if (s.top == s.base)

    {

        return 1;

    }

    return 0;

}

void Creat(Stack &s)//栈的初始化;

{

    s.base=new elemtype[maxsize];///

    s.top=s.base;

//    s.top++;

//    s.base++;

    s.Size=maxsize;

}

void push(Stack &s,elemtype e)//进栈;

{

    if (s.top-s.base >= s.Size)

    {

        s.base=(elemtype *)realloc(s.base,2*maxsize*sizeof(Stack));

        s.Size+=maxsize;

        ///s.top=s.base+s.Size;

    }

    s.top++;

    *s.top=e;

}

void pop(Stack &s)//出栈

{

    if (s.top != s.base)

    {

        s.top--;

    }

}

void print(Stack &s)//栈内所有元素的输出;

{

    while (!Empty(s))

    {

        cout<<*s.top;

        pop(s);

    }

    cout<<endl;

}

void Clear(Stack &s)//清空栈;

{

    while (!Empty(s))

    {

        pop(s);

    }

}

void exch(Stack &s,int a[],int m,int n)//数组前每m个元素和过后m个元素互换位置;

{

    int i;

    for (i=n; i>n-m; i--)

    {

        push(s,a[i]);

    }

    while(!Empty(s))

    {

        cout<<*s.top<<" ";

        s.top--;

    }

    for (i=n-m; i>=1; i--)

    {

        push(s,a[i]);

    }

    while(!Empty(s))

    {

        cout<
4000
;<*s.top;

        s.top--;

        if (!Empty(s))

        {

            cout<<" ";

        }

    }

    cout<<endl;

}

int main()

{

    int a[1000];

    int m,i,n;

    Stack s;

    Creat(s);

    cin>>n;

    for (i=1; i<=n; i++)

    {

        cin>>a[i];

    }

    cin>>m;

    exch(s,a,m,n);//数组前每m个元素和过后m个元素互换位置;

    print(s);

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: