一般,大二数据结构与算法这门课第一个实验就是这玩意儿
别看代码有点长,其实很好理解的
包含了动态数组的建立与内存释放,排序,插入,向右循环,逆置
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
void BULID(int *pi,int n);
int INSERT(int *pi,int n);
void ROTATERIGHT(int *pi,int n);
void INPUT(int *pi,int n);//线性表中的数据元素都为整数
void SORT(int *pi,int n);
void INSERTSORT(int *pi,int n,int insert);
void SHOW(int *pi,int n);//输出
void SPEED(int *pi,int n,int k);//循环右移
void REALISE(int *pi);
void INVERSE(int *pi,int n);
int main(void)
{
//建立一个线性表
//建立一个动态数组
int *pi=NULL,length;
pi=(int *)malloc(MAXSIZE);//线性表建立成功!!!
//动态申请最大内存空间
if(pi==NULL)
exit(0);
else
{
printf("How many numbers do you want to enter?\n");
scanf("%d",&length);
BULID(pi,length);
/* INPUT(pi,length);
SORT(pi,length);*/
}
int op;
printf("\n1您可进行如下操作:\n1.插入数字\n2.循环右移\n3.逆置\n4.结束程序!\n请输入您要进行的操作序号:\n");
do{
scanf("%d",&op);
switch(op)
{
case 1:
length=INSERT(pi,length);
break;
case 2:
ROTATERIGHT(pi,length);
break;
case 3:
INVERSE(pi,length);
SHOW(pi,length);
break;
case 4: REALISE(pi);
break;
default:
printf("程序暂时无法执行此操作,更多精彩请期待后期版本!");
break;
};
if(op!=4)
printf("\n输入您想继续进行的操作:");
}while(op!=4);
}
void BULID(int *pi,int n)
{
/*printf("How many numbers do you want to enter?\n");
scanf("%d",&length);*/
INPUT(pi,n);
SORT(pi,n);
SHOW(pi,n);
}
int INSERT(int *pi,int n)
{
int insert;
printf("输入你要插入的数字:\n");
scanf("%d",&insert);
n++;
INSERTSORT(pi,n,insert);
SHOW(pi,n);
return n;
}
void ROTATERIGHT(int *pi,int n)
{
int k;
printf("你想向右循环移动几位?\n");
scanf("%d",&k);
SPEED(pi,n,k);
SHOW(pi,n);
}
//输入数据
void INPUT(int *pi,int n)
{
for(int i=0;i<n;i++)
{
scanf("%d",&pi[i]);
}
}
//按增序排序
void SORT(int *pi,int n)
{
if(pi==NULL||n<=0)
return;
const int N=100;
int TEMP[N];
for(int i=0;i<=N;i++)
{
TEMP[i]=0;
}
for(int i=0;i<n;i++)
{
TEMP[pi[i]]++;
//TEMP[pi+i]++;
}
int i=0,j=0;
while(j<=N)
{
if(TEMP[j]!=0)
{
pi[i]=j;
TEMP[j]--;
i++;
}
else
j++;
}
}
//插入后排序
void INSERTSORT(int *pi,int n,int insert)
{
// printf("%d",n);
for(int i=0;i<n;i++)
{
int count=0;
if(insert<*(pi+i))
{
// printf("%d\n",*(pi+i));
// count++;
// printf("count%d++",count);
for(int j=n-1;j>i;j--)
{
pi[j]=*(pi+j-1);
}
pi[i]=insert;
return ;
}
}
}
//输出
void SHOW(int *pi,int n)
{
for(int i=0;i<n;i++)
{
printf("%d ",*(pi+i));
}
}
//循环右移k位
void SPEED(int *pi,int n,int k)
{
int temp;
for(int i=0;i<k;i++)
{
temp=*(pi+n-1);
for(int j=n-1;j>0;j--)
{
pi[j]=*(pi+j-1);
}
pi[0]=temp;
}
}
//记得释放内存空间
void REALISE(int *pi)
{
printf("程序运行结束,释放空间!");
free(pi);
}
//逆置
void INVERSE(int *pi,int n)
{
//printf("\n");
int q[n];
for(int i=n-1;i>=0;i--)
q[n-1-i]=*(pi+i);
for(int j=0;j<n;j++)
pi[j]=q[j];
// printf("\n");
}