有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组

有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中... 有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组中元素的个数。要求:算法采用函数形式,并在机器上进行调试。并输出删除数据前后的数组。下标法,地址法,指针达,移动指针法。。。。。 展开
 我来答
金色潜鸟
2017-12-06 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5718万
展开全部
写了2种方法,用 fun() 或 用fun2(). 返回的数组数据 改写了原数组。所以只能调用其中之1,且只能调用一次。
数组数据例子:
9 2 3 2 3 4 2
返回:9 3 3 4
2 2 2 2 2 2 2
返回: 没有元素
#include <stdio.h>
void fun(int s[],int n, int *n2){
int i,j;
int ii=1,v;
*n2=n;
for (i=n-1;i>0;i--) if(s[i]<=s[ii])ii=i;
v=s[ii];
i= ii;
do{
if (s[i]==v) {for (j=i;j< *n2-1;j++)s[j]=s[j+1]; s[*n2-1]=0; *n2= *n2-1; }
else i++;
} while(i <= *n2);
}

void fun2(int *s,int n, int *n2){
int i,j;
int ii=1,v;
*n2=n;
for (i=n-1;i>0;i--) if( *(s+i)<= *(s+ii))ii=i;
v= *(s+ii);
i= ii;
do{
if ( *(s+i)==v) {for (j=i;j< *n2-1;j++)*(s+j)= *(s+j+1);
*(s + *n2-1)=0; *n2= *n2-1; }
else i++;
} while(i <= *n2);
}

int main()
{
int s[8]={999,9,2,3,2,3,4,2};
int n,i,n2;
n=8;
for(i=1;i<n;i++) printf("%d ",s[i]);printf("\n");
fun(s,n,&n2);
//fun2(s,n,&n2);
for (i=1;i<n2;i++) printf("%d ",s[i]);
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式