内容:在顺序表中仅用一个辅助空间,将结点循环右移k位
#include "stdio.h"
int i,j,t;
int k; //定义变量
int p[]={1,2,3,4}; //定义长度为四的数组
void main()
{
for(i=0;i<4;i++)
{printf("%d\n",p[i]);} //打印原始数组的数据值
in:printf("Please input number j:\n"); //输入将要移动的位置数值
scanf("%d",&j);
while(j<0) //当输入的j值为负值时出现错误,进行以下语句
{printf("Error!Please input number j:\n"); //重新输入j的值
scanf("%d",&j) ;
}
for(k=0;k<j;k++) //对数组内的数值依照输入正确的j值进行移动
{t=p[3];
for(i=0;i<3;i++)
{p[3-i]=p[3-i-1];}
p[0]=t;
}
printf("The result is:\n"); //将移动的结果打印出来
for(i=0;i<4;i++)
{printf("%d\n",p[i]);}
goto in;
}方案二:
#include "stdio.h"
#include "conio.h"
int i,j,t;
int k,m;
char l,s; //定义变量
int p[]={1,2,3,4}; //定义长度为四的数组
void main()
{
for(i=0;i<4;i++)
{printf("%d\n",p[i]);} //打印原始数组的数据值
in: printf("Please input number j:\n"); //输入将要移动的位置数值
scanf("%d",&j);
while(j<0)
{printf("Error!\n"); //当输入的j值为负值时出现错误,进行以下语句
printf("Press 0(restart) or 1(continue)\n"); //
printf("m=");
scanf("%d",&m);
switch(m) //对输入的m值进行判断
{
case 0: //当m=0时(restart)清屏,恢复原始数组的顺序,重新开始执行
{
clrscr();
p[0]=1;
p[1]=2;
p[2]=3;
p[3]=4;
goto in;}break;
case 1: //当m=1时(continue),继续执行以下语句
{ printf("Reverse?(y/n)"); //对所输入的m负值数,进行求反操作(y:求反n:不求)
scanf("%s",&s);
if (s=='y') //当s='y'时,对j值求反
{j=-j;
printf("You want to input j=%d\n",j);
}
else {goto in;} //当s='n'时,使用goto语句到in的位置,继续执行
}break;
}
}
for(k=0;k<j;k++) //对数组内的数值依照输入的j值进行移动
{t=p[3];
for(i=0;i<3;i++)
{p[3-i]=p[3-i-1];}
p[0]=t;
}
printf("The result is:\n"); //将移动的结果打印出来
for(i=0;i<4;i++)
{printf("%d",p[i]);}
printf("Retry?(y/n)"); //此次操作结束后是否继续进行判断
scanf("%s",&l);
if (l=='y') {goto in;} //y为回到in位置继续。n为结束当前操作
else{exit (0);}
}