数据结构-顺序表学习资料

什么是顺序表?

顺序表是一种线性数据结构,它按照元素在内存中的物理顺序存储数据。顺序表可以通过数组实现,也可以通过链表和动态数组实现。

顺序表的特点

  • 元素连续存储:顺序表中的元素在内存中是连续存储的,这样可以通过索引直接访问元素,时间复杂度为O(1)。
  • 大小固定:顺序表的大小是固定的,一旦初始化后,无法动态改变大小。
  • 插入和删除效率低:由于顺序表的大小固定,插入和删除元素时会导致其他元素的移动,效率较低,时间复杂度为O(n)。

顺序表的基本操作

初始化

void InitList(SeqList &L) {
    L.data = new ElemType[MAXSIZE];
    L.length = 0;
}

插入元素

bool ListInsert(SeqList &L, int pos, ElemType e) {
    if (pos < 1 || pos > L.length + 1) {
        return false;  // 插入位置非法
    }
    if (L.length == MAXSIZE) {
        return false;  // 顺序表已满
    }
    for (int i = L.length; i >= pos; i--) {
        L.data[i] = L.data[i - 1];  // 插入位置及之后的元素后移
    }
    L.data[pos - 1] = e;  // 插入新元素
    L.length++;
    return true;
}

删除元素

bool ListDelete(SeqList &L, int pos, ElemType &e) {
    if (pos < 1 || pos > L.length) {
        return false;  // 删除位置非法
    }
    e = L.data[pos - 1];  // 保存被删除的元素
    for (int i = pos; i < L.length; i++) {
        L.data[i - 1] = L.data[i];  // 被删除位置之后的元素前移
    }
    L.length--;
    return true;
}

查找元素

int LocateElem(SeqList L, ElemType e) {
    for (int i = 0; i < L.length; i++) {
        if (L.data[i] == e) {
            return i + 1;  // 返回元素位置
        }
    }
    return 0;  // 未找到元素
}

获取元素

bool GetElem(SeqList L, int pos, ElemType &e) {
    if (pos < 1 || pos > L.length) {
        return false;  // 获取位置非法
    }
    e = L.data[pos - 1];
    return true;
}

清空顺序表

void ClearList(SeqList &L) {
    L.length = 0;
}

你可能感兴趣的:(数据结构)