#include<stdio.h>
//#include<string.h>
//#include<math.h>
#include<stdlib.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//Status是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef char ElemType;
//进行顺序表类型声明
#define MAXSIZE 100
typedef struct SqList{
ElemType *elem;
int length;
};
//初始化
Status InitList_Sq(SqList *L){
// L.elem=new ElemType[MAXSIZE];//为顺序表分配空间 (c++写法)
L->elem=(ElemType *)malloc(sizeof(ElemType)*100);//为顺序表分配空间(c写法)
if(!L->elem) exit(OVERFLOW);//存储分配失败
L->length=0;//空表的长度=0
return OK;
}
//销毁
void DestoryList(SqList *L){
// if(L.elem) delete L.elme;//释放存储空间 (c++写法)
if(L->elem) free(&L);//释放存储空间 (c写法)
}
//清空
void ClearList(SqList *L){
L->length=0;//将线性表的长度设置为0
}
//求表的长度
int GetLength(SqList L){
return (L.length);
}
//判断表是否为空
int IsEmpty(SqList L){
if(L.length==0) return TRUE;
return FALSE;
}
//取值
int GetElem(SqList L,int i,ElemType *e){
if(i<1 || i>L.length) return ERROR;//判断i值是否合理,若不合理,返回ERROR
e[0]=L.elem[i-1];//第i-1的单元存储着第i个数据
return OK;
}
//查找算法
int LocateElem(SqList L,ElemType e){
for(int i=0;i<L.length;i++)
if(L.elem[i]==e) return i+1;//查找成功,返回序号
return 0;//查找失败,返回0
}
//插入算法
Status ListInsert_Sq(SqList *L,int i,ElemType e){
if(i<1 || i>L->length+1) return ERROR;//i值不合法
if(L->length==MAXSIZE) return ERROR;//当前存储空间已满
for(int j=L->length-1;j>=i-1;j--)
L->elem[j+1]=L->elem[j];//插入位置及之后的元素后移1位
L->elem[i-1]=e;//将新元素e放入第i个位置
L->length++;//表的长度+1
return OK;
}
//删除算法
Status ListDelete_Sq(SqList *L,int i){
if(i<1 || i>L->length) return ERROR;//i值不合法
for(int j=i;j<=L->length-1;j++)
L->elem[j-1]=L->elem[j];//被删除元素之后的元素前移1位
L->length--;//表的长度-1
return OK;
}
int main(){
//生产测试数据
char a[10];
for(int i=0;i<10;i++){
a[i]=i+'A';
printf("%c\n",a[i]);
}
struct SqList L;//创建结构体L
InitList_Sq(&L);//初始化
printf("length=%d\n",GetLength(L));//求表的长度
printf("IsEmpty=%d\n",IsEmpty(L));//判断表是否为空
for (int i = 0; i < 10; i++){
ListInsert_Sq(&L,i+1,a[i]);//插入
}
ElemType *e;
GetElem(L,1,e);//取值
printf("%c\n",e[0]);
printf("LocateElem=%d\n",LocateElem(L,'B'));//查找算法
ListDelete_Sq(&L,2);//删除算法
printf("LocateElem=%d\n",LocateElem(L,'B'));//查找算法
ClearList(&L);//清空
DestoryList(&L); //销毁
return 0;
}