您的位置:首页 > 理论基础 > 数据结构算法

复习(数据结构):线性表 : C

2016-06-25 10:09 483 查看

代码

数据结构

typedef struct{
ElemType data[MAXSIZE];
int length;  //当前线性表的长度
}SqList;


初始化线性表

//初始化线性表

Status InitList(SqList *L){
L->length=0;
return OK;
}

//置空线性表

Status ClearList(SqList *L){
L->length=0;
return OK;
}

// 得到第i个元素的值,用e返回

Status GetElem(SqList L,int i,ElemType *e){
if(L.length==0 || i<1 || i>L.length)
return ERROR;
*e = L.data[i-1];
return OK;
}

// 返回第一个和数据e满足关系的元素的位置

int LocateElem(SqList L,ElemType e){
int i;
if(L.length==0)
return 0;
for(i=0;i<L.length;i++){
if(L.data[i]==e )
break;
}

if(i>=L.length)
return 0;

return i+1;

}

//插入,在第i个位置之前插入新的元素e,L的长度加1
Status ListInsert(SqList *L ,int i,ElemType e ){
int k;
if(L->length==MAXSIZE)
retur Error;
if(i<1||i>L->length+1)
return ERROR;

if(i<=L->length) // 插入的数据不在表尾
{
for(k=L->length-1;k>=i-1;k--)
L->data[k+1]=L->data[k];
}

//插入新的元素
L->data[i-1]=e;
L->length++;

return OK;
}
// 删除

Status ListDelete(SqList *L,int i,ElemType *e  ){
int k;
if(L->length==MAXSIZE)
retur Error;
if(i<1||i>L->length+1)
return ERROR;
*e=L->data[i-1];

if(i<L->length){
for(k=i;k<L->length;k++)
L->data[k-1]=L->data[k];
}

L->length--;
return OK;

}

//输出元素
Status visit(ElemType c  ){
prinf("%d",c );
return OK;
}
Status ListTravese(SqList L ){
int i;
for(i=0;i<L.length;i++)
visit(L.data[i]);
printf("\n");
return OK;
}

// 合并链表
// 注意La->data的写法等于(*La).data

void unionL(SqList *La,SqList Lb){
int La_len,Lb_len,i;
ElemType e;
La_len=*La->length;
Lb_len= Lb.length;

for(i=1;i<=Lb_len;i++){
GerElem(LB,i,&e );
if(!LocateElem(*la,e))
ListInsert(La,++La_len,e );
}
}


测试程序

//main函数
int main(){
SqList L;
SqList Lb;

ElemType e;
Status i;
int j,k;

// 初始化
i = InitList(&L);
printf("初始化L后:L.length=%d\n",L.length);
// 插入顺序表( 表头)
for(j=1;j<=5;j++)
i=ListInsert(&L,1,j);
printf("在L的表头插入后1~5后:L.data=")
// 遍历
ListTrave(L);
printf("L.length")
printf("L是否是空:i=%d(1:是,0:否)\n",L.length);

//情况顺序表
i=ClearList(&L);
//构造一个有10个数的Lb
i=InitList(&Lb);
for(j=6;j<=15;j++)
i=ListInsert(&Lb,1,j);

unionL(&L,Lb);

printf("依次输出合并了Lb的L的元素:");
ListTraverse(L);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: