很显然这是一个作业贴~我还是把答案贴出来吧~

作业要求:
编程显示一个长度为n的整数数组循环右移m位的结果。
例如,当有数组元素{1 ,2 ,3 ,4 ,5, 6 ,7 ,8 ,9 ,10 }
若n=10, m=3,
循环右移后的数组的排列为
{ 8, 9,10 ,1, 2 ,3, 4 ,5, 6 ,7 }

这个题目比较简单,就不分析了 直接看代码吧~

#include <stdio.h>
#include <stdlib.h>

#define  MAXNUM  100                        /*顺序表中最大的元素个数*/
#define  FALSE   0
#define  TRUE    1
typedef  int  DataType;

struct SeqList
{
   int n;                                   /*存放线性表中元素的个数n<=MAXNUM*/
   DataType *element;                       /*存放线性表中的元素*/

};
typedef struct SeqList*PSeqList;
PSeqList createNullList_seq(void)           /*创建一个空顺序表*/
{
 PSeqList palist;
    palist=(PSeqList)malloc(sizeof(struct SeqList));
    if (palist!=NULL)
  palist->element = (DataType * )malloc(sizeof(DataType));
 if (palist->element!=NULL)
  {
   palist->n=0;                    /*空表长度为0*/
   return(palist);
  }
else free(palist);
printf(“out of space!\\n”);                  /*存储分配失败*/
return (NULL);
}
void  rotate_right(PSeqList palist,int n,int m)     /*定义rotate_right函数,即使数据循环右移动*/
{
    if(palist->n==MAXNUM)                         /*溢出*/
    {
         printf(“Over flow!\\n”);
         return;
    }
    else
    {
         int j,q,k;                                     /*定义临时下标q*/
         for(j=0;j<m;j++)
         {
             k=palist->element[n-1];
             for(q=n-1;q>=0;q–)
             {
                  palist->element[q]=palist->element[q-1];
             }
             palist->element[0]=k;
         }
    }
}
int main()
{
   /*对rotate_right函数进行声明*/
 PSeqList ROR_alist;
 int n,m;
 int i;
 printf(“请输入整数数组元素个数n(注:n<100):\\n”);
 scanf(“%d”,&n);
 if(n>=MAXNUM)
 {
  printf(“Overflow!\\n”);
  return(0);
 }
    ROR_alist=createNullList_seq();
 if(ROR_alist!=NULL)
 {
  printf(“请输入数组元素:\\n”);                       /*输入数组元素*/
        for(i=0;i<n;i++)
  scanf(“%d”,&ROR_alist->element[i]);
  printf(“原数组排列为:\\n”);
  for(i=0;i<n;i++)
   printf(“%d”,ROR_alist->element[i]);
  printf(“\\n”);
     printf(“请输入循环右移的位数m:\\n”);
     scanf(“%d”,&m);
        rotate_right(ROR_alist,n,m);                        /*调用rotate_right函数*/
  printf(“循环右移后的数组的排列为:\\n”);
  for(i=0;i<n;i++)
   printf(“%d”,ROR_alist->element[i]);
        printf(“\\n”);
 }
 free(ROR_alist->element);
 free(ROR_alist);
 return(1);
}

运行后截图:

评论被关闭。