线性表之数组

#include<stdio.h>

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define MAXSIZE 20

 

typedef int ElemType;

typedef int Status;

typedef struct LNode {

    ElemType data[MAXSIZE];

    int length;              //线性表中当前元素的个数

}SqList;

 

//初始化线性表

StatuscreatList(SqList *L)

//输入参数:(1)L:L的地址

{

    L->length = 0;

    return OK;

}

 

//返回线性表中的元素个数

intgetLength(SqList *L)

//输入参数:(1)L:L的地址

{

    return L->length;

}

 

//在位置n处插入元素e(注意:位置是从0开始计数的)

StatusinsertList(SqList *L, int n, ElemType e)

//输入参数:(1)L:L的地址

{

    int k;

    //判断输入参数合法性

    if (n < 0 || n > L->length) return ERROR;

    //判断线性表是否已满

    if (L->length + 1>= MAXSIZE) return ERROR;

    //从第n位开始,每个元素后移一位

    //拿到最后一个元素的位置(地址或下标)  

    for (k = L->length; k > n; k--)

    {

        L->data[k] = L->data[k-1];

    }

    //元素e放入位置n处

    L->data[n] = e;

    //线性表当前元素个数加1

    L->length++;

    return OK;

}

 

//删除位置n处的元素

StatusdeleteList(SqList *L, int n)

//输入参数:(1)L:L的地址。(2)n:被删除的元素在线性表中的位置

{

    //判断输入参数的合法性

    if (n<0 || n>L->length) return ERROR;

    //判断线性表是否为空

    if (L->length == 0) return ERROR;

    //从第n处位置开始,每个元素前进一位

    for (n; n < L->length; n++)

    {

        L->data[n-1] = L->data[n];

    }

    //线性表中当前元素的个数减1

    L->length--;

    return OK;

}

 

//查找线性表中的第n个元素

ElemTypesearchList(SqList *L, int n)

//输入参数:(1)L:L的地址。(2)n:线性表中的第n个元素。

{

    //判断输入参数的合法性

    if (n<0 || n>L->length) return ERROR;

    return L->data[n];

}

 

//遍历线性表中元素

Statustraverse(SqList *L)

//输入参数:(1)L:L的地址

{

    for (int i = 0; i < L->length; i++)

    {

        printf("线性表中第%d个元素是%d\n", i, L->data[i]);

    }

    return OK;

}

 

int main()

{

    SqList La;

    creatList(&La);

    for (int i = 0; i < 10;i++)

    {

        insertList(&La,i, i);

    }

    printf("线性表的长度是%d\n", getLength(&La));

    traverse(&La);

    deleteList(&La,5);

    printf("线性表的长度是%d\n", getLength(&La));

    traverse(&La);

    return OK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值