线性表的定义与操作--顺序表

/*线性表的定义与操作---顺序表*/

/*定义状态标志位*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 20 /*存储空间初始分配量*/
typedef int ElemType;  /*ElemType根据实际情况定义,这里假设为int型*/
typedef int Status; /*Status为函数类型,其值为函数返回状态,如OK等*/

/*定义一个线性表结构*/
typedef struct LNode{

    ElemType data[MAXSIZE];  /*数组存取数据元素,最大长度为MAXSIZE*/
    int length; /*线性表当前长度*/
}Node,*List;

/* 初始化一个空线性表L  */
List MakeEmpty(){

    List L;
    L = (List)malloc(sizeof(Node));  
    if(L)
        return ERROR;
    L->length = NULL;
    return L;
}


/*获得元素:
*根据位序K,返回表L的相应元素到e中*/
Status GetElem(int k,ElemType *e,List L){
    /*判断链表L是否为空及K值是否合理*/
    if(L->length == NULL || k<1 || k>length+1)
        return ERROR;
    *e = L->data[k-1];
    return OK;
}

/*查找:
*在线性表L中查找与给定值X相等的元素,如果查找成功,则返回该元素的序号;否则返回0*/
int LocateElem(ElemType X,List L){

    int i;
    i = 0;
    if(L->length == NULL)/*判断链表不为空*/
        return ERROR;
    while(i<L-length && L->data[i]!=X){
        i++;
    }
    if(i>=L-length)  /* 如果没找到,返回错误信息 */
        return ERROR;
    else
        return i;  /* 找到后返回的是存储位置 */
}

/*插入:
*在位序k(从1开始)前插入一个新元素X*/
Status Insert(ElemType X,int k,List L){

    int i;
    if(L->length >= MAXSIZE) /*表空间已满,不能插入*/
        return ERROR;
    if(k<1 || k>L->length+1)  /*检查插入位置的合法性*/
        return ERROR;
    for(i=L->length-1;i>=k-1;i--){ /*将要插入位置的元素依次往后挪动一个位置*/

        L->data[i+1] = L->data[i];
    }

    L->data[k-1] = X;/*插入新元素X*/
    L->length++; /*数据元素长度加1*/
    return OK;
}

/*删除:
删除表中第k个位置上的元素*/
Status Delete(int k,List L){

    int i;
    if(L->length == NULL) /*检查线性表L不为空*/
        return ERROR;
    if(k<1 || k>L->length+1) /*检查删除位置合法性 */
        return ERROR;
    for(i=k;i<=L->length;i++){/*将删除位置后继元素前移*/

        L->data[k-1]=L->data[k];
    }
    L->length--;/*数据元素长度减小1*/
    return OK;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值