第二章 线性表 : 顺序表

顺序表

sequential list

i 个元素的存储地址 : L o c ( a i ) = L o c ( a 1 ) + ( i − 1 ) × c Loc(a_i)=Loc(a_1)+(i-1)\times c Loc(ai)=Loc(a1)+(i1)×c

顺序表的存储结构定义

#define MaxSize 1000
typedef int DataType;
typedef struct{
    DataType data[MaxSize];
    int length;
}SeqList;

初始化顺序表

void InitList(SeqList *L){
    L->length = 0;
}

建立顺序表

int CreatList(SeqList *L, DataType a[], int n){
    if(n > MaxSize){
        printf("顺序表的空间不够, 无法建立\n");
        return 0;
    }
    for(int i = 0; i < n; i ++)
        L->data[i] = a[i];
    L->length = n;
    return 1;
}

判空操作

int Empty(SeqList *L){
    if(L->length == 0) return 1; /* 顺序表为空返回 1 */
    return 0;
}

求顺序表的长度

int Length(SeqList *L){
    return L->length;
}

遍历操作

void PrintList(SeqList *L){
    for(int i = 0; i < L->length; i ++)
        printf("%d ", L->data[i]);
} 

按值查找

int Locate(SeqList *L, DataType x){
    for(int i = 0; i < L->length; i ++)
        if(L->data[i]==x) return i+1;
    return 0;
}

按位查找

int Get(SeqList *L, int i, DataType *ptr){
    if(i<1 || i>L->length){
        printf("位置非法, 查找失败\n");
        return 0;
    }
    else{
        *ptr = L->data[i-1];
        return 1;
    }
}

插入操作

在元素的第 i 个位置上插入一个新元素 x , 1 ≤ i ≤ n 1\leq i \leq n 1in

int Insert(SeqList *L, int i, DataType x){
    if(L->length >= MaxSize){
        printf("上溢错误, 插入失败\n");
        return 0;
    }
    if(i<1 || i>L->length+1){
        printf("非法插入位置\n");
        return 0;
    }
    for(int j = L->length; j >= i; j --)
        L->data[j] = L->data[j-1];
    L->data[i-1] = x;
    L->length ++;
    return 1;
}

删除操作

int Delete(SeqList *L, int i, DataType *ptr){
    if(L->length==0){
        printf("顺序表为空, 无法删除\n");
        return 0;
    }
    if(i<1 || i>L->length){
        printf("非法位置, 删除失败\n");
        return 0;
    }
    *ptr = L->data[i-1];
    for(int j = i; j < L->length; j ++)
        L->data[j-1] = L->data[j];
    L->length --;
    return 1;
}

你可能感兴趣的:(数据结构-课程,算法,数据结构)