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

代码

  • 数据结构
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值