读书人

求前辈指教…解决方法

发布时间: 2012-03-28 15:40:03 作者: rapoo

求前辈指教……
/*已知顺序表La中数据元素按非递减有序排列,试写一个算法,将x插入到La的合适位置,保持该表的有序性*/

#include<stdio.h>
#define Maxsize 10
typedef struct
{
int v[Maxsize];
int len;
}sqlist;
int in(sqlist * L,int x)
{
int j,i;
//遍历数组,查找比所插入的数大的数
for(i=0;i<=(*L).len;i++)
{
if(x<=(*L).v[i])
break;//找到则跳出循环,找到的i就是新输入的数的位置
}

for(j=(*L).len-1;j>=i;j--)//从最后一个数开始,依次往后面移数,空出i的位置
{
(*L).v[i+1]=(*L).v[j];
}

(*L).v[i]=x;//将新输入的数放到i的空位上
(*L).len=(*L).len+1;//数组长度加1

return(1);
}
main()
{
int i,value;
sqlist a;
a.len=5;
for(i=0;i<5;i++)
a.v[i]=i+1;//创建一个升序排列的数组,元素为5个

scanf("%d",&value); //输入任意的一个数,将其插入数组

if(in(&a,value))//调用函数进行插入
for(i=0;i<a.len;i++)//输出插入后的新数组
printf("%d\n",a.v[i]);
else
printf("wrong");

}



帮我看看这个程序吧……我都不知道错在哪了,但是运行出来老不对
单步调试也不会看……求前辈指教

[解决办法]
for(i=0;i<(*L).len;i++)
{
if(x<=(*L).v[i])
break;//找到则跳出循环,找到的i就是新输入的数的位置
}

for(j=(*L).len-1;j>=i;j--)//从最后一个数开始,依次往后面移数,空出i的位置
{
(*L).v[j+1]=(*L).v[j];
}
[解决办法]

C/C++ code
#include "stdafx.h"#include<stdio.h>#include <iostream>   using namespace std;#define Maxsize 10typedef struct{    int v[Maxsize];    int len;}sqlist;sqlist a;int in(sqlist * L,int x){    int j,i;    //遍历数组,查找比所插入的数大的数    for(i=0;i<=L->len;i++)    {        if(x<=L->v[i])            break;//找到则跳出循环,找到的i就是新输入的数的位置    }     for(j=L->len;j>=i;j--)//从最后一个数开始,依次往后面移数,空出i的位置    {        L->v[j]=L->v[j-1];    }    L->v[i]=x;//将新输入的数放到i的空位上    L->len+=1;//数组长度加1    return(1);}int main(){    int i,value;        a.len=5;    for(i=0;i<5;i++)        a.v[i]=i+1;//创建一个升序排列的数组,元素为5个    scanf("%d",&value); //输入任意的一个数,将其插入数组    if(in(&a,value))//调用函数进行插入        for(i=0;i<a.len;i++)//输出插入后的新数组            printf("%d\n",a.v[i]);    else        printf("wrong");    system("pause");    return 0;}
[解决办法]
程序已改 有一点问题 如下
C/C++ code
#include<stdio.h>#define Maxsize 10typedef struct{    int v[Maxsize];    int len;} sqlist;int in(sqlist * L, int x){    int j, i;//遍历数组,查找比所插入的数大的数    for (i = 0; i <= (*L).len; i++)    {        if (x <= (*L).v[i])            break;//找到则跳出循环,找到的i就是新输入的数的位置    }    for (j = (*L).len - 1; j > i; j--) //从最后一个数开始,依次往后面移数,空出i的位置    {        (*L).v[j] = (*L).v[j-1]; //此处有点问题    }    (*L).v[i] = x; //将新输入的数放到i的空位上    (*L).len = (*L).len + 1; //数组长度加1    return(1);}int main(){    int i, value;    sqlist a;    a.len = 5;    for (i = 0; i < 5; i++)        a.v[i] = i + 1; //创建一个升序排列的数组,元素为5个    scanf("%d", &value); //输入任意的一个数,将其插入数组    if (in(&a, value)) //调用函数进行插入        for (i = 0; i < a.len; i++) //输出插入后的新数组            printf("%d\n", a.v[i]);    else        printf("wrong");    return 0;} 

读书人网 >C语言

热点推荐