顺序表问题解决不了
#include<stdio.h>#include<malloc.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define ERROR
#define OVERFLOW
typedef struct SqList
{
int * elem;
int length;
int listsize;
}SqList;
//顺序表的初始化
void IntiList(SqList *L)
{
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem) exit(0);
L->length=0;
L->listsize=LIST_INIT_SIZE;
printf("InitList Success!\n");
}
//书序表的插入
void ListInsert(SqList *L,int i,int e)
{
int *p,*q,*newbase;
if(i<1||i>L->length+1)
exit(0);
if(L->length>=L->listsize)
{
newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(0);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)//元素往右移动
*(p+1)=*q;
*q=e;
++L->length;
printf("ListInsert Success!\n");
}
//顺序表的遍历
void ListTravese(SqList *L)
{
for(int i=0;i<=L->length-1;i++)
printf("%d ",L->elem[i]);
}
//顺序表的删除
void ListDelete(SqList *L,int i, int e)
{
int *p,*q;
if(i<1||(i>L->length+1)) exit(0);
p=&(L->elem[i-1]);
e=*p;
q=&(L->elem[L->length-1]);//等价于q=L->elem+L->length-1
for(++p;p<=q;++p)
*(p-1)=*p;
--L->length;
}
//顺序表的定位
int LocateElem_Sq(SqList *L,int e,int(*compare)(int,int))
{
int i=1,*p;
p=L->elem;
while(i<=L->length && !(compare)(*p++,e))
++i;
if(i<=L->length) return i;
else return 0;
}
//顺序表的长度
int ListLength(SqList *L)
{
return L->length;
}
//顺序表置为空表
int ClearList(SqList *L)
{
L->length=0;
return OK;
}
//顺序表的销毁
int DestroyList(SqList *L)
{
free(L->elem);
L->elem=NULL;
L->length=0;
L->listsize=0;
return OK;
}
int main()
{
SqList L;
IntiList(&L);
ListInsert(&L,1,1);
ListInsert(&L,2,2);
ListInsert(&L,3,3);
ListInsert(&L,4,4);
ListInsert(&L,5,5);
ListInsert(&L,6,6);
ListInsert(&L,7,7);
ListInsert(&L,8,8);
ListTravese(&L);
ListDelete(&L,2,2);
ListLength(&L);
printf("\n");
ListTravese(&L);
// printf("the postion is:%d",LocateElem_Sq(&L,7,compare));
return 0;
}
这段程序中这块什么意思int LocateElem_Sq(SqList *L,int e,int(*compare)(int,int))
{
int i=1,*p;
p=L->elem;
while(i<=L->length && !(compare)(*p++,e))
++i;
if(i<=L->length) return i;
else return 0;
}
我知道其他的方法可以写,如果是这种方法定位,该怎么写啊
尤其是int(*compare)(int,int))