尾部附加源码
增加数据
Status ListInsert_Sq(SqList &L,int i,ElemType e){
if(L.length == LIST_INIT_SIZE || i<1||i>L.length+1){
return ERROR;
}
ElemType *q,*p;
p = &(L.elem[i-1]); /**这个可以有多种方法实现**/
q = L.elem + L.length;
for(q;q>p;q--){
*q = *(q-1);
}
L.elem[i-1] = e;
L.length++;
}
删除数据
Status ListDelete_Sq(SqList &L,int i,ElemType &e){
if(L.length == LIST_INIT_SIZE || i<1||i>L.length+1){
return ERROR;
}
ElemType *p,*q;
p = &(L.elem[i-1]);//p为被删除元素的位置
e = *p;//将被删除元素的值给e
q = L.elem + L.length -1;//表中最后一个元素
//这里从被删除的元素开始将后面的元素依次向前移动
for(++p;p<=q;++p){
*(p-1) = *p;
}
//这里也可以换种写法
// for(p;p<=q;++p){*p = *(p+1) }
--L.length;
return OK;
}
查找数据
int LocateElem_Sq(SqList L, ElemType &e){
for(int i=0;i<L.length;i++){
if(L.elem[i] == e){
return i+1;
}
}
return 0;
}
获取数据
Status GetElem_Sq(SqList L,int i,ElemType &e){
if(L.length == LIST_INIT_SIZE || i<1||i>L.length+1){
return ERROR;
}
e = L.elem[i-1];
return OK;
}
两个表的交集
void Mix_Sq(SqList A,SqList B){
ElemType e;
SqList C;
InitList_Sq(C);
int j = 0;
for(int i = 0; i<GetLength_Sq(B);i++){
GetElem_Sq(B,i+1,e);
if(LocateElem_Sq(A,e))
ListInsert_Sq(C,++j,e);
}
show(C);//此方法是展示结果
DestroyList_Sq(C);//此方法是删除创建的顺序表
}
两个表的并集
void Differ_Sq(SqList A,SqList B){
SqList C;
InitList_Sq(C);
ElemType e;
int j = 0;
for(int i=0;i<GetLength_Sq(A);i++){
GetElem_Sq(A,i+1,e);
if(!LocateElem_Sq(B,e))
ListInsert_Sq(C,++j,e);
}
show(C);//此方法是展示结果
DestroyList_Sq(C);//此方法是删除创建的顺序表
}
两个表的差集
void Differ_Sq(SqList A,SqList B){
SqList C;
InitList_Sq(C);
ElemType e;
int j = 0;
for(int i=0;i<GetLength_Sq(A);i++){
GetElem_Sq(A,i+1,e);
if(!LocateElem_Sq(B,e))
ListInsert_Sq(C,++j,e);
}
show(C);//此方法是展示结果
DestroyList_Sq(C);//此方法是删除创建的顺序表
}
相信大家都能看懂,不多说了,附上源码。
点击下载