顺序表一些基本操作

#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define MaxSize 10 //顺序表最大长度
#define InitSize 5 //顺序表初始的长度
typedef struct{
ElemType *data;
int length;
}SqList;
int InitList(SqList *L){
L->data=(ElemType*)malloc(MaxSize*sizeof(ElemType));
if(!L->data){printf("存储分配失败\n");return 0;}
ElemType *p=L->data;
for(int i=0;i<InitSize;i++){
*p=i+1;
p++;
}//顺序表初始元素为1 2 3 4 5
L->length=InitSize;
return 1;
}//初始化顺序表
int LocateElem(SqList *L,ElemType e){
ElemType *p=L->data;
int flag=0;
//printf("%d ",*p);
for(int i=0;i<L->length;i++){
if(*p==e){
flag=1;
return i+1;
}
p++;
}
if(flag==0){printf("顺序表中没有元素%d\n",e);return 0;}
}//返回所要查找的元素e在顺序表中的位置
int ListInsert(SqList *L,int i,ElemType e){
ElemType *p=L->data+L->length-1;
if(i<1||i>MaxSize){return 0;}//判断元素插入的位置是否有效
if(L->length>=MaxSize){return 0;}//判断插入是否会发生越界
if(i>L->length){*(p+1)=e;L->length=L->length+1;return 1;}
for(int j=0;j<L->length-i+1;j++){
*(p+1)=*p;
p--;
}
*(p+1)=e;
L->length=L->length+1;
return 1;
}//将元素e插入到i的位置
int ListDelete(SqList *L,int i){
ElemType *p=L->data+i-1;
if(i<1||i>MaxSize){return 0;}//判断元素删除的位置是否有效
if(L->length<1){return 0;}//判断插入是否会发生越界
if(i==L->length){L->length=L->length-1;return 1;}
for(int j=0;j<L->length-i;j++){
*p=*(p+1);
p++;
}
L->length=L->length-1;
return 1;
}//删除位于顺序表i位置的元素
void PrintList(SqList *L){
ElemType *p=L->data;
printf("输出顺序表:");
for(int i=0;i<L->length;i++){
printf("%d ",*p);
p++;
}
printf("\n");
printf("顺序表长度:%d\n",L->length);
}//打印出顺序表
void main(){
SqList L;
int e;
InitList(&L);
ListInsert(&L,3,6);
ListDelete(&L,1);
printf("所要查找的元素位置为:%d\n",LocateElem(&L,3));
PrintList(&L);
}

猜你喜欢

转载自www.cnblogs.com/Yshun/p/11123357.html
今日推荐