首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请哪位帮小弟我看个帖子,不知道异常在哪里

2012-03-21 
请哪位帮我看个帖子,不知道错误在哪里。/******/#include stdio.h#include stdlib.h#define MaxSize 50

请哪位帮我看个帖子,不知道错误在哪里。
/**
*
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50

typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList; 

void CreateList(SqList * L,ElemType a[],int n)
{
int i;
L = (SqList*)malloc(sizeof(SqList));
for (i = 0 ; i < n ; i++)
L->data[i] = a[i];
L->length = n;
}

void Destroy(SqList *L)
{
free(L);
}

void Find(SqList * L,ElemType x)
{
int i = 0,temp,j;
while (i < L->length && L->data[i] < x)
i++;
if (i >= L->length)
{
printf ("不存在这样的元素!\n");
L->length++;
L->data[i] = x;
}
else if (L->data[i] == x)
{
printf ("存在这样的元素!\n");
temp = L->data[i];
L->data[i] = L->data[i + 1];
L->data[i + 1] = L->data[i];
}
else 
{
printf ("不存在这样的元素!\n");
L->length++;
for (j = L->length ; j > i ; j--)
L->data[j] = L->data[j - 1];
L->data[i] = x;

}
}

int main ()
{
int i,x,a[10];
SqList *s = 0;
printf ("请输入x的值:");
scanf ("%d",&x);
printf ("请依次输入顺序表中各元素的值:\n");
for (i = 0 ; i < 10 ; i++)
scanf ("%d",&a[i]);
CreateList (s,a,10);
Find (s,x);
printf ("输出查找后的顺序表:\n");
for (i = 0 ; i < s->length ; i++)
printf ("%d\t",s->data[i]);
Destroy (s);
printf ("\n");
return 0;
}

[解决办法]
CreateList 函数中的SqList * L其实还是未分配空间,在此函数中的L和main函数中的不一样,只是个副本而已,并非是值传递,最好是把CreateList设置为带返回类型的,将创建好的L作为SqList 指针返回。

可以看看函数的参数传递
比较经典的例子是
swap(int x, inty)
{
int tmp;
tmp = x;
x = y;
y = tmp;
}

其实相当于没有交换。
[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>#define MaxSize 50typedef int ElemType;typedef struct{    ElemType data[MaxSize];    int length;}SqList;  void CreateList(SqList ** L,ElemType a[],int n){    int i;    (*L) = (SqList*)malloc(sizeof(SqList));    for (i = 0 ; i < n ; i++)        (*L)->data[i] = a[i];    (*L)->length = n;}void Destroy(SqList *L){    free(L);}void Find(SqList * L,ElemType x){    int i = 0,temp,j;    while (i < L->length && L->data[i] < x)        i++;    if (i >= L->length)    {        printf ("不存在这样的元素!\n");        L->length++;        L->data[i] = x;    }    else if (L->data[i] == x)    {        printf ("存在这样的元素!\n");        temp = L->data[i];        L->data[i] = L->data[i + 1];        L->data[i + 1] = L->data[i];//你想做什么??    }    else      {        printf ("不存在这样的元素!\n");        L->length++;        for (j = L->length ; j > i ; j--)            L->data[j] = L->data[j - 1];        L->data[i] = x;    }}int main (){    int i,x,a[10];    SqList *s = 0;    printf ("请输入x的值:");    scanf ("%d",&x);    printf ("请依次输入顺序表中各元素的值:\n");    for (i = 0 ; i < 10 ; i++)        scanf ("%d",&a[i]);    CreateList (&s,a,10);    Find (s,x);    printf ("输出查找后的顺序表:\n");    for (i = 0 ; i < s->length ; i++)        printf ("%d\t",s->data[i]);    Destroy (s);    printf ("\n");    return 0;} 

热点排行