请哪位帮我看个帖子,不知道错误在哪里。
/**
*
*
*
*/
#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;}