运行到LocateElem不能使用
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
#define OK 1
#define ERROR -1
typedef char ElemType;
//声明顺序表的结构体类型
typedef struct{
ElemType *elem;
int length;
}SqList;
//初始化函数,构造一个空的线性表,申请线性表的存储空间
int InitList(SqList *L){
L->elem=(char*)malloc(sizeof(char)*MAXSIZE);
if(L->elem==NULL)
return ERROR;
L->length=0;//线性表当前长度为0
return OK;//为线性表L申请空间,若申请成功返回OK,否则返回ERROR
}
//插入元素的函数,在第i个元素之间插入一个新元素
int ListInsert(SqList *L,int i,char e){
int j;
if(L->length==MAXSIZE){
L->elem=(char*)realloc(L->elem,sizeof(char)*(MAXSIZE+10));
printf("L->length:%d\n",L->length);
if(L->elem!=NULL)
printf("申请成功\n");
else return ERROR;
}
//为新元素让出位置,将第i个元素开始后移
for(j=L->length-1;j>=i-1;j--){
L->elem[j+1]=L->elem[j];
}
//将新元素放入到第i个位置
L->elem[i-1]=e;
//线性表的长度加一
L->length++;
return OK;
}
//删除函数的元素,删除线性表中第i个元素
int ListDelete(SqList *L,int i){
//在顺序表L中删除第i个元素设置i的合法范围L.length>i>1
if((i<1)||(i>L->length))
return ERROR;
//被删除元素之后的元素前移
for(int j=i;j<=L->length-1;j++){
L->elem[j-1]=L->elem[j];
}
--L->length;//长度减一
return OK;
}
//获取元素的函数,取线性表中第i个元素的值
int GetElem(SqList L,int i,char e){
//判断i的位置是否合理1=<i<=L.length
if(i<1||i>L.length)
return ERROR;
//elem[i-1]是存储第i个数据元素的
e=L.elem[i-1];
return OK;
}
//元素的定位,根据某个值在线性表中查找其位置,若没有此元素,则返回0
int LOcateElem(SqList L,char e){
//从第一个元素起,依次和e比较,找到e相等的L.elem[i],就返回该序号i+1
for(int i=0;i<L.length;i++){
if(L.elem[i]==e)
return i+1;//查找成功
return ERROR;//查找失败
}
}
//输出线性表元素
void print(SqList *L){
for(int i=0;i<L->length;i++)
printf("%c ",L->elem[i]);
printf("\n");
}
int main(){
SqList Lp;
int i;
char e;
InitList(&Lp);
//printf("%d\n",i);
//在第一个位置上插入A
printf("当前插入的数据为:");
ListInsert(&Lp,1,'A');
ListInsert(&Lp,2,'B');
ListInsert(&Lp,3,'C');
ListInsert(&Lp,4,'D');
print(&Lp);
ListDelete(&Lp,1);
printf("当前删除后的数据为:");
print(&Lp);
printf("输入取值的位置序号和元素:");
scanf("%d,%c",&i,&e);
int g;
g=GetElem(Lp,i,e);
if(g==-1) printf("无此数据\n");
else printf("查找成功\n");
print(&Lp);
printf("输入要查找的元素:");
scanf("%c",&e);
int locate;
locate=LOcateElem(Lp,e);
if(locate==-1) printf("无此数据\n");
else printf("查找数据是第%d个",locate);
print(&Lp);
return 0;
}