栈实验之数组逆序

来源:互联网 发布:淘宝导航三级分类代码 编辑:程序博客网 时间:2024/05/14 08:30

题目描述

有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 maxsize 100
#define sizenum 100
typedef int element;
typedef struct
{
   element *top;
   element *base;
   int stsize;
}sq;
int intistack(sq*s)
{
   s->base=(element*)malloc(maxsize*sizeof(element));
   if(!s->base)
    return -1;
   s->top=s->base;
   s->stsize=maxsize;
   return 0;
}
int push(sq*s,int k)
{
   if(s->top-s->base>s->stsize)
   {
     s->base=(element*)realloc(s->base,(s->stsize+sizenum)*sizeof(element));
     if(!s->base)
        return -1;
     s->top=s->base+sizenum;
     s->stsize+=sizenum;
   }
   *(++s->top)=k;
   return 0;
}
int main()
{
    int n,m,i,a[maxsize];
    sq s;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    intistack(&s);
    for(i=n-m+1;i<=n;i++)
    {
       push(&s,a[i]);
    }
    while(s.top>s.base)
    {
       printf("%d ",*(++s.base));
    }
    for(i=1;i<=n-m;i++)
        printf("%d ",a[i]);
    return 0;
}

0 0
原创粉丝点击