作业要求:
编程显示一个长度为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);
}
int rotate_right(PSeqList palist,int n,int m) /*定义rotate_right函数,即使数据循环右移动*/
{
if(palist->n==MAXNUM) /*溢出*/
{
printf("Over flow!\n");
return(0);
}
else
{
int j;
int q; /*定义临时下标q*/
for(j=0;j<m;j++)
{
for(q=palist->n-1;q>=0;q--)
{
palist->element[q+1]=palist->element[q]; /*所有元素均后移一个位置*/
palist->n=palist->n+1;
palist->element[0]=palist->element[n-1];
palist->n=palist->n-1;
}
}
return(1);
}
}
int main()
{
int rotate_right(PSeqList palist,int n,int m); /*对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("请输入循环右移的位数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");
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);
}
我觉得是自己定义的rotate_right函数出了问题……死循环神马的(额……我不懂……)