关于线性顺序表,一些地方弄不清楚。新問題見4樓
题目:有顺序表La和Lb,要求写算法将属于la但不属于lb的元素组成新的顺序表(可以直接运行)我的问题:为什么的lc总是接不到la数据;
我的程序思想是:先把新表lc的数据复制la的,在lc上与lb比较,删除元素。
#include <stdio.h>
#include <malloc.h>
#define ElemType int
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef struct{
ElemType *elem;
int length;
int listsize;
} Sqlist;
int Init_sqlist(Sqlist *L,int n)
{
L->elem=(ElemType *)malloc(n*sizeof(ElemType));
if (!L->elem) return ERROR;
L->length=0;
L->listsize=n;
return OK;
}
int sqlistcopy(Sqlist La,Sqlist *Lc)
{int i;
for(i=0;i<=La.length;i++)
*Lc->elem[i]=*La.elem[i];
return(OK);
}
int ListDelete_Sq(Sqlist *L,int i)
{
int *p,*q;
if(i<1||i>L->length) return ERROR;
p = &(L->elem[i-1]);
q=L->elem+L->length;
for (++p; p <= q; ++p) *(p-1) = *p;
--L->length;
return OK;
}
int zhengli(Sqlist *La,Sqlist Lb)
{
int i,j;
for(i=0;i<=Lb.length;i++)
{
for(j=0;j<=La->length;j++)
{
if(Lb.elem[i]==La->elem[j])
ListDelete_Sq(&La,j+1);
}
}
return(OK);
}
void main()
{Sqlist La;
Sqlist Lb;
Sqlist Lc;
int i,m,n;
printf("请输入A线性表里元素个数:\n");
scanf("%d",&n);
Init_sqlist(&La,n);
printf("请输入元素:\n");
for(i=0;i<n;i++)
{scanf("%d",&La.elem[i]);
La.length++;}
printf("请输入B线性表里元素个数:\n");
scanf("%d",&m);
Init_sqlist(&Lb,m);
printf("请输入元素:\n");
for(i=0;i<m;i++)
{ scanf("%d",&Lb.elem[i]);
Lb.length++;}
Init_sqlist(&Lc,n);
sqlistcopy(La,&Lc);
zhengli(&Lc,Lb);
printf("转变之后A.B.C三个表的内容:\n");
for(i=0;i<La.length;i++)
printf("%d,",La.elem[i]);
printf("\n");
for(i=0;i<Lb.length;i++)
printf("%d,",Lb.elem[i]);
printf("\n");
for(i=0;i<Lc.length;i++)
printf("%d,",Lc.elem[i]);
printf("\n");
}
[[it] 本帖最后由 longfei8812 于 2008-11-5 11:34 编辑 [/it]]