第一回写头函数,求大神帮助
第一次写头函数,求大神帮助
问题如图
下面是程序
------解决思路----------------------
typedef前的extern去掉
函数原型放在头文件中
函数实现放在.C文件中
函数原型前的extern也是多余的,默认就是extern
函数实现前不需extern
问题如图
//此头函数用于存放对线性表操作的函数
#ifndef LINEAR_H_INCLUDED
#define LINEAR_H_INCLUDED
#define LIST_INIT_SIZE 100
#define LISTINCERMENT 10
extern typedef int elemtype;
extern typedef struct
//用于指向线性表地址,并保存线性表的长度与空间大小
{
elemtype *elem; //用于存放线性表首地址
int length; //用于存放线性表中的数据个数
int listsize; //用于存放线性表的总单元个数
}sqlist;
extern void Linear_initlist(sqlist L);
extern void Linear_listinsert(sqlist L,int i,elemtype e);
extern void Linear_listdelete(sqlist L,int i);
extern void Linear_listmerge(sqlist la,sqlist lb,sqlist lc);
extern void Linear_listintersect(sqlist la,sqlist lb,sqlist lc);
extern void Linear_listexcept(sqlist la,sqlist lb,sqlist lc);
extern void Linear_initlist(sqlist L)
//此函数用于创建空的线性表
{
L.elem=(elemtype*)malloc(LIST_INIT_SIZE*sizeof(elemtype));
if(!L.elem)
exit(-1);
L.length=0;
L.listsize=LIST_INIT_SIZE;
}//Linear_initlist
extern void Linear_listinsert(sqlist L,int i,elemtype e)
//此函数用于向线性表中第i个位置插入插入一个新元素e
{
elemtype *newbase;
elemtype *q,*p;
if(i<1||i>L.length+1)
exit(-1);
if(L.length>=L.listsize)
{
newbase=(elemtype*)realloc(L.elem,(L.listsize+LISTINCERMENT)*sizeof(elemtype));
if(!newbase)
exit(-1);
L.elem=newbase;
listsize+=LISTINCERMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;
++L.length;
}//Linear_listinsert
extern void Linear_listdelete(sqlist L,int i)
//此函数用于将线性表中第i个元素删除
{
elemtype *q,*p;
if(i<1||i>L.length+1)
exit(-1);
q=l.elem+i-1;
for(p=q;p<L.elem+L.length-1;p++)
{
*p=*(p+1);
}
--L.length;
}//Linear_listdelete
extern void Linear_listmerge(sqlist la,sqlist lb,sqlist lc)
//此函数用于将la和lb线性表取并集,并将数据存于lc表中
{
elemtype *pa,*pb,*pc;
int i=0; //用于记录lc表中元素个数
pa=la.elem;
pb=lb.elem;
lc.listsize=la.length+lb.length;
lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
if(!lc.elem)
exit(-1);
pc=lc.elem;
while(pa<=la.elem+la.length-1&&pb<=lb.elem+lb.length-1)
{
if(*pa<*pb)
*pc++=*pa++;
else
{
if(*pa>*pb)
*pc++=*pb++;
else
{
*pc++=*pa++;
pb++;
}
}
i++;
}
while(pa<la.elem+la.length-1)
{
*pc++=*pa++;
i++;
}
while(pb<lb.elem+lb.length-1)
{
*pc++=*pb++;
i++;
}
lc.length=i;
}//Linear_listmerge
extern void Linear_listintersect(sqlist la,sqlist lb,sqlist lc)
//此函数用于将la和lb线性表取交集,并将数据存于lc表中
{
elemtype *pa,*pb,*pc;
int i=0; //用于记录lc表中元素个数
pa=la.elem;
pb=lb.elem;
lc.listsize=la.length+lb.length;
lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
if(!lc.elem)
exit(-1);
pc=lc.elem;
while(pa<=la.elem+la.length-1&&pb<=lb.elem+lb.length-1)
{
if(*pa<=*pb)
{
if(*pa==*pb)
{
*pc++=*pa++;
pb++;
i++;
}
else pa++;
}
if(*pa>*pb)
{
if(*pa==*pb)
{
*pc++=*pb++;
pa++;
i++;
}
else pb++;
}
}
lc.length=i;
}//Linear_listintersect
extern void Linear_listexcept(sqlist la,sqlist lb,sqlist lc)
//此函数将用线性表lb对la取差集,并将数据存于lc表中。
{
sqlist ld;
elemtype *pa,*pc,*pd;
elemtype *pa1;
int i=0; //用于记录lc表中元素个数
pa=la.elem;
pd=ld.elem;
lc.listsize=la.length;
lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
if(!lc.elem)
exit(-1);
pc=lc.elem;
Linear_listintersect(sqlist la,sqlist lb,sqlist ld);
while(pd<=ld.elem+ld.length-1)
{
if(*pa==*pd)
{
pa1=pa;
while(pa1<la.elem+la.length-2)
{
*pa1++=*(pa1+1);
}
la.length--;
pd++;
}
pa++;
}
lc=la;
}
#endif // LINEAR_H_INCLUDED
------解决思路----------------------
typedef前的extern去掉
函数原型放在头文件中
函数实现放在.C文件中
函数原型前的extern也是多余的,默认就是extern
函数实现前不需extern