永发信息网

哪位大哥帮我改下这个程序,急!!!

答案:2  悬赏:20  手机版
解决时间 2021-07-31 01:15
  • 提问者网友:欲劫无渡
  • 2021-07-30 08:53
我是用C++6.0运行的,提示没有错误也没有警告,就是运行不出来,帮我改改
#include<stdio.h>
#include<stdlib.h>
void input(int *v,int *n)
{
int i;
printf("\n请输入元素到线性表中:");
for(i=0;i<*n;i++)
scanf("%d",v+i);
}

void output(int *v,int*n)
{
int i;
for(i=0;i<*n;i++)
printf("%d\t",*(v+i));
}

int *initsl(int m,int *n)
{
int *v;
v=(int *)malloc(m*sizeof(int));
*n=0;
return v;
}

int serch(v,n,x)
int n;
int v[],x;
{
int k;
k=0;
while((k<n)&&(*(v+k)!=x)) k=k+1;
if(k==n) k=-1;
return (k);
}

int beserch(v,n,x)
int v[],x;
int n;
{
int i,j,k;
i=1;j=n;
while(i<=j)
{ k=(i+j)/2;
if(v[k-1]==x)
return(k-1);
if(v[k-1]>x) j=k-1;
else i=k+1;
}
return(-1);
}

int split(p,m,n)
int m,n;
int p[];
{ int i,j,k,u;
int t;
i=m;j=n;k=(i+j)/2;
if((p[i]>=p[j])&&(p[j]>=p[k]))
u=j;
else if((p[i]>=p[k])&&(p[k]>=p[j])) u=k;
else u=i;
t=p[u]; p[u]=p[i];
while(i!=j)
{ while((i<j)&&(p[j]>=t)) j=j-1;
if(i<j)
{p[i]=p[j];i=i+1;}
while((i<j)&&(p[i]<=t)) i=i+1;
if(i<j)
{ p[j]=p[i]; j=j-1;}
}
p[i]=t;
return(i);
}

void bubsort(v,n)
int n;int v[];
{int m,k,j,i;
int t;
k=0;m=n-1;
while(k<m)
{j=m-1;m=0;
for(i=k;i<=j;i++)
if(v[i]>v[i+1])
{t=v[i];v[i]=v[i+1];v[i+1]=t;m=i;}
j=k+1;k=0;
for(i=m;i>=j;i--)
if(v[i-1]>v[i])
{t=v[i];v[i]=v[i+1];v[i+1]=t;k=i;}
}
return ;
}
void qksort(v,m,n)
int m,n;
int v[];
{int i;
if(n>m)
{i=split(v,m,n);
qksort(v,m,i-1);
qksort(v,i+1,n);}
return ;
}

void main()
{
int *v=NULL,*n=NULL,m,x,k;
char a;
n=(int *)malloc(sizeof(int));
printf("\n请输入线性表的大小(m):");
scanf("%d",&m);
v=initsl(m,n);
printf("\n请输入线性表的实际长度(n):");
scanf("%d",n);
input(v,n);
output(v,n);
printf("\n请问线性表中的元素是否有序(y/n)?");
getchar();
a=getchar();
getchar();
if(a=='y'||a=='Y')
{printf("\n线性表中元素有序,采用对分查找法查找");
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);}
else printf("\n线性表中元素无序,是否先进行排序再执行查找(y/n)?");

a=getchar();
getchar();
if(a=='y'||a=='Y')
{
printf("\n1.快速排序(方便元素较多的线性表对元素排序时使用)\n");
printf("\n2.冒泡排序(方便元素较少的线性表对元素排序时使用)\n");
printf("\n请键入数字选择排序方法:\n\n1快速排序\n\n2冒泡排序");
printf("\n\n键入其他数字放弃排序直接采用顺序查找法查找");
scanf("%d",&k);
if(k==1)
{
qksort(v,m,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
if(k==2)
{
bubsort(v,n);
printf("\n排序后:");
output(v,n);
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=beserch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
if(k>2||k<1)
{
printf("\n请输入要查找的元素");
scanf("%d",&x);
k=serch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
}
else
{printf("\n请输入要查找的元素");
scanf("%d",&x);
k=serch(v,n,x);
if(k==-1)
printf("\n无此元素");
else printf("\n%d是第%d个元素",x,k+1);
}
}

最佳答案
  • 五星知识达人网友:逃夭
  • 2021-07-30 10:06

都忘的差不多了 没看出什么问题 可以正常运行


全部回答
  • 1楼网友:春色三分
  • 2021-07-30 11:19

你看一下是不是没有应用程序

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯