#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqlList;
void CreateList(SqlList * &L,ElemType a[],int n);//创建顺序表
void InitList(SqlList * &L);//初始化顺序表
void DestroyList(SqlList * &L);//销毁顺序表
int ListIsEmpty(SqlList * L);//判断顺序表是否为空
int ListLength(SqlList * L);//求顺序表长度
void DisplayList(SqlList * L);//输出顺序表
int GetElem(SqlList * &L,int i,ElemType &e);//根据下标返回该元素
int LocationElem(SqlList * &L,ElemType e);//根据元素查找并返回该下标
int ListInsert(SqlList * &L,int i,ElemType e);//元素插入
int ListDelete(SqlList * &L,int i,ElemType &e);//元素删除
//mian函数
void main()
{
ElemType a[MaxSize]={'a','b','c','d','e'};
SqlList * L;
InitList(L);
CreateList(L,a,MaxSize);
printf("顺序表成员输出:\n");
DisplayList(L);
printf("顺序表长度为:\n");
printf("%d \n",ListLength(L));
printf("顺序表是否为空:\n");
if(ListIsEmpty(L))
{
printf("是 \n");
}
else
{
printf("否 \n");
}
printf("顺序表第3个元素是:\n");
ElemType e;//保存获取的元素
if(GetElem(L,3,e))
{
printf("%c \n",e);
}
else
{
printf("该元素不存在!\n");
}
printf("元素'a'的位置是: \n");
int i=0;
i=LocationElem(L,'a');
if(i)
{
printf("%d \n",i);
}
else
{
printf("该元素不存在!\n");
}
printf("在第4个元素位置上插入'f'元素: \n");
e='f';
if(ListInsert(L,4,e))
{
printf("元素%c插入成功! \n",e);
}
else
{
printf("元素%c插入失败! \n",e);
}
printf("顺序表成员输出:\n");
DisplayList(L);
printf("删除顺序表第3个元素:\n");
if(ListDelete(L,3,e))
{
printf("第3个元素%c删除成功! \n",e);
}
else
{
printf("第3个元素删除失败! \n");
}
printf("顺序表成员输出:\n");
DisplayList(L);
DestroyList(L);
printf("顺序表已经释放!\n");
}
//创建顺序表
void CreateList(SqlList * &L,ElemType a[],int n)
{
int i;
L=(SqlList *)malloc(sizeof(SqlList));
for(i=0;i<n;i++)
{
L->data[i]=a[i];
}
L->length=n;
}
//初始化顺序表
void InitList(SqlList * &L)
{
L=(SqlList *)malloc(sizeof(SqlList));
L->length=0;
}
//销毁顺序表
void DestroyList(SqlList * &L)
{
free(L);
}
//判断顺序表是否为空
int ListIsEmpty(SqlList * L)
{
return(L->length==0);
}
//求顺序表长度
int ListLength(SqlList * L)
{
return(L->length);
}
//输出顺序表
void DisplayList(SqlList * L)
{
int i;
for(i=0;i<L->length;i++)
{
printf("%c ",L->data[i]);
}
printf("\n");
}
//根据下标返回该元素
int GetElem(SqlList * &L,int i,ElemType &e)
{
if(i<1||i>L->length)
return 0;
e=L->data[i-1];
return 1;
}
//根据元素查找并返回该下标
int LocationElem(SqlList * &L,ElemType e)
{
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
//元素插入
int ListInsert(SqlList * &L,int i,ElemType e)
{
if(i<1||i>L->length)
return 0;
i--;
for(int j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return 1;
}
//元素删除
int ListDelete(SqlList * &L,int i,ElemType &e)
{
if(i<1||i>L->length)
return 0;
i--;
e=L->data[i];
for(int j=i;j<L->length-1;j++)
{
L->data[j]=L->data[j+1];
}
L->length--;
return 1;
}