顺序表格式
#define MAXSIZE
typedef struct{
ElemType*elem;
int length;
}
SqList;//定义顺序表类型
SqList L;//定义变量L,L是SqList这种类型的,L是个顺序表
若上述中L被定义为指针,即:
SqList * L;
可表示为:L->elem;
L->length;
线性表的基本操作:
线性表L的初始化(参数用引用)
Status lnitList_Sq(SqList &L){ //构造一个空的顺序表L
L.elem = new ElemType[MAXSIZE]//为顺序表分配空间
if(!L.elem)exit(OVERFLOW); //存储分配失败
L.length = 0; //空表长度为0
return OK;
}
销毁线性表L
void DestroyList(SqList &L){
if(L.elem) delete L.elem;//释放存储空间
}
清空线性表L
void ClearList(SqList &L){
L.length = 0; //将线性表长度置为0
}
求线性表L的长度
int GetLength(SqList L){
return(L.length);
}
判断线性表L是否为空
int IsEmpty(SqList L){
if(L.length == 0) return 1;
else return 0;
}
顺序表的取值(根据位置 i 获取相应位置数据元素的内容)
int GetElem(SqList L, int i, ElemType &e){
if(i<1||i>L,length) return ERROR;
//判断i值是否合理,若不合理,返回ERROR
e = L.elem[i - 1];
return OK; //第i-1的单元存储着第i个数据
}
顺序表的查找
在线性表L中查找与指定值e相同的数据元素的位置
从表的一端开始,逐个进行记录的关键字和给定值的比较。找到,返回该元素的位置序号,未找到,返回0。
int LocateElem(SqList L,ElemType e){
//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
for(i = 0;i<L,length;i++)
if(L.elem[i] == e)
return i+1;//查找成功,返回序号
return 0;//查找失败,返回0
}
顺序表插入
Status Listlnsert_Sq(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1)return ERROR;//i值不合法
if(L,length == MAXSIZE)return ERROR;//当前存储空间已满
for(j = L.length - 1;i>=i-1;i++)
{
L.elem[j+1] = l.elem[j];//插入位置及之后的元素后移
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(j = i;j<=L.length-1;j++)
L.elem[j-1] = L.elem[j];//被删除元素之后的元素前移
L.length--;//表长减1
return OK;
}