//顺序表 注意元素数据才是表 length只是记录
#include <cstdio>
#include <stdlib.h>
#define MAXSIZE 20
#define Ok 1
#define Error 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType *data; //存储空间的首地址
int length; //线性表当前长度
}SqList; //顺序表的结构类型
//顺序表的初始化
Status InitList(SqList &L)
{
L.data=new ElemType[MAXSIZE]; //申请空间
if(!L.data) exit(OVERFLOW); //申请失败退出
L.length=0; //空表长度为0
return 0;
}
//顺序表的取值
Status GetElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length) return Error; //判断i值是否合理,不合理返回Error
e=L.data[i-1];
return OK;
}
//顺序表的查找
Status LocateElem(SqList L,ElemType e)
{
for(i=0;i<L.length;i++)
if(L.data[i]==e) return i+1;//查找成功,返回序号i+1//i+1为其在序列中的序号
return 0; //查找失败,返回0
}
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e)
{
if((i<1)||(i>L.length+1)) return Error;//插入位置不合法
if(L.length==MAXSIZE) return Error;//当前存储空间已满
for(int j=L.length-1;j>=i-1;j--) //考虑到计算机从下标为0存放
L.data[j+1]=L.data[j]; //依次后移
++L.length; //表长+1
return Ok; //操作成功
}
//顺序表的删除
Status ListDelete(SqList &L,int i)
{
if((i<1)||(i>L.length)) return Error; //删除位置不合法
for(int j=i;j<=L.length-1;j++)
L.data[j-1]=L.data[j]; //用后面的元素掩盖
--L.length; //表长-1
return Ok;
}
void uionL(List *La,List Lb)//交集
{
int La_len,Lb_len,i;
La_len = ListLength(*La);
Lb_len = ListLength(Lb);
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,&e);
if(!LocateElem(*La,e))
ListInsert(La,++La_len,e);
}
}