主题:路过的朋友看看
这个程序 在查找数据时有点问题 可以通过 但是不能实现查找功能 又找不出错误
麻烦大家 看看 谢谢
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define LISTINCREMENT 10
#define OVERFLOW 2
#define OK 1
#define ERROR -1
typedef int ElemType ;
typedef int status;
typedef struct { ElemType *elem;
int length;
int listsize;
} SqList;
status InitList (SqList *L) /*定义一个线形表*/
{ int length1;
printf("请确定顺序的长度");
scanf("%d",&length1);
L->listsize=length1;
L->elem=(ElemType*)malloc(length1*sizeof(ElemType));
if(!L)
{printf("out of space");
exit(OVERFLOW);
}
L->length=0;
return OK;}
status Listinsert (SqList*L,int i, ElemType e) /*在i元素的前面插入元素e*/
{
ElemType *p,*q,*newbase;
if(i<1||i>L->length+1)
return ERROR;
if(L->length>L->listsize)
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(newbase==NULL)
{
printf("out of space");
return (OVERFLOW);
}
L->listsize+=LISTINCREMENT;
p=&( L->elem[i-1]);
for(q=&(L->elem[L->length-1]) ;q>=p;q--)
*(q+1)=*q;
L->elem[i-1]=e;
L->length++;
return OK;
}
status DeleteList (SqList *L,int i) /*删除i个元素*/
{ ElemType *q ,*p;
if(i<1||i>L->length)
return ERROR;
q=&(L->elem[i-1]);
p=L->elem+L->length-1;
for(q++;q>=p;q++)
*(q-1)=*q;
L->length--;
return OK;
}
status compare(ElemType x,ElemType y)
{ if(x==y)
return OK;
else return 0;}
status LocateElem (SqList L,ElemType e) /*查找元素*/
{ int i=0,*p;
p=L.elem;
while(i< L.length&&!(*compare)(*p++,e))
i++;
if(i<L.length)
return i;
else return 0; }
main()
{ SqList L;
ElemType i,e;
if(InitList(&L)==OVERFLOW) printf("ERROR");
else printf("\n************************************************\n");
{ printf("请输入线性表的元素:");
for(i=0;i<L.listsize;i++)
{ scanf("%d",&(L.elem[i]));L.length++; }
}
for(i=0;i<L.listsize;i++)
printf("%4d",L.elem[i]);
printf("\n************************************************\n");
printf("请输入要插入的位置和元素:") ;
scanf("%d%d",&i,&e);
Listinsert (&L,i,e);
for(i=0;i<L.length;i++)
printf("%4d",L.elem[i]);
printf("\n************************************************\n");
printf("请输入要删除的元素的位置:") ;
scanf("%d",&i);
DeleteList (&L, i ) ;
for(i=0;i<L.length;i++)
printf("%4d",L.elem[i]);
printf("\n************************************************\n");
printf("\n***********************请输入你要查找的元素的值*****************:");
scanf("%d",&e) ;
LocateElem(L,e); /*寻找用户所要查找的元素*/
printf("请按任意键退出");
getch();
}
麻烦大家 看看 谢谢
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define LISTINCREMENT 10
#define OVERFLOW 2
#define OK 1
#define ERROR -1
typedef int ElemType ;
typedef int status;
typedef struct { ElemType *elem;
int length;
int listsize;
} SqList;
status InitList (SqList *L) /*定义一个线形表*/
{ int length1;
printf("请确定顺序的长度");
scanf("%d",&length1);
L->listsize=length1;
L->elem=(ElemType*)malloc(length1*sizeof(ElemType));
if(!L)
{printf("out of space");
exit(OVERFLOW);
}
L->length=0;
return OK;}
status Listinsert (SqList*L,int i, ElemType e) /*在i元素的前面插入元素e*/
{
ElemType *p,*q,*newbase;
if(i<1||i>L->length+1)
return ERROR;
if(L->length>L->listsize)
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(newbase==NULL)
{
printf("out of space");
return (OVERFLOW);
}
L->listsize+=LISTINCREMENT;
p=&( L->elem[i-1]);
for(q=&(L->elem[L->length-1]) ;q>=p;q--)
*(q+1)=*q;
L->elem[i-1]=e;
L->length++;
return OK;
}
status DeleteList (SqList *L,int i) /*删除i个元素*/
{ ElemType *q ,*p;
if(i<1||i>L->length)
return ERROR;
q=&(L->elem[i-1]);
p=L->elem+L->length-1;
for(q++;q>=p;q++)
*(q-1)=*q;
L->length--;
return OK;
}
status compare(ElemType x,ElemType y)
{ if(x==y)
return OK;
else return 0;}
status LocateElem (SqList L,ElemType e) /*查找元素*/
{ int i=0,*p;
p=L.elem;
while(i< L.length&&!(*compare)(*p++,e))
i++;
if(i<L.length)
return i;
else return 0; }
main()
{ SqList L;
ElemType i,e;
if(InitList(&L)==OVERFLOW) printf("ERROR");
else printf("\n************************************************\n");
{ printf("请输入线性表的元素:");
for(i=0;i<L.listsize;i++)
{ scanf("%d",&(L.elem[i]));L.length++; }
}
for(i=0;i<L.listsize;i++)
printf("%4d",L.elem[i]);
printf("\n************************************************\n");
printf("请输入要插入的位置和元素:") ;
scanf("%d%d",&i,&e);
Listinsert (&L,i,e);
for(i=0;i<L.length;i++)
printf("%4d",L.elem[i]);
printf("\n************************************************\n");
printf("请输入要删除的元素的位置:") ;
scanf("%d",&i);
DeleteList (&L, i ) ;
for(i=0;i<L.length;i++)
printf("%4d",L.elem[i]);
printf("\n************************************************\n");
printf("\n***********************请输入你要查找的元素的值*****************:");
scanf("%d",&e) ;
LocateElem(L,e); /*寻找用户所要查找的元素*/
printf("请按任意键退出");
getch();
}