大学,考研,学习数据结构和算法分析

考研数据结构笔记——2.顺序表

2019-03-10  本文已影响1人  ribose

顺序表

假定线性表的元素类型为ElemType,线性表的存储类型描述为

#define MaxSize 50   //定义线性表的最大长度
typedef struct{
    ElemType data[MaxSize];     //顺序表的元素
    int length;     //顺序表的当前长度
}SqList;     //顺序表的类型定义

顺序表的动态分配

#define InitSize 100
typedef struct{
    ElemType *data;     //指示动态分配数组的指针
    int MaxSize,length;     //数组的最大容量和当前个数
}SeqList;       //动态分配顺序表的类型定义

C++的动态分配语句为
L.data = new Elemtype[InitSize]

顺序表的特点:

顺序表上基本操作的实现

插入操作

bool ListInsert(Sqlist &L,int i,Elemtype e){
    if(i < 1||i > L.length + 1)     //判断i的范围
        return false;
    if(L.length >= MaxSize)     //判断存储是否已满
        return false;
    for (int j = L.length;j >= i;j--){
        L.data[j] = L.data[j - 1];  //元素后移
    L.data[j - 1] = e;      //位置i(下标i-1)处放入e
    L.length++;     //顺序表长度加1
    return true;
    }
}

删除操作

bool ListDelete(Sqlist &L,int i,Elemtype &e){
    if(i < 1||i > L.length)     //判断i的范围
        return false;
    e = L.data[i - 1];
    for (j = i;j < L.length;j++)
    L.data[j - 1] =L.data[j];   //位置i(下标i-1)处后的元素前移
    L.length--;     //顺序表长度减1
    return true;
}

按值查找(顺序查找)

int LocateElem(Sqlist L,ElemType e){
    int i;
    for(i = 0;i < L.length;i++){
        if(L.data[i] == e)  //下标为i的元素等于e
            return i + 1;   //返回其位序i+1
    }
    return 0;   //退出循环,查找失败
}
上一篇下一篇

猜你喜欢

热点阅读