📖
Data Structure
  • 基本概念
  • 线性表
    • 顺序表
    • 链表
    • 广义表
  • 栈
  • 队列
  • 字符串
  • 树
    • 二叉树
    • 二叉搜索树
    • 平衡二叉树
    • 堆
    • 哈夫曼树
  • 图
    • DFS
    • BFS
  • 排序
    • 选择排序
    • 插入排序
    • 比较选择排序和插入排序
    • 希尔排序
  • 常用算法
    • 排序
    • 二叉树遍历
    • 根据两种遍历顺序重构树
    • 二叉树深度
    • 最近公共祖先
    • 回溯集合
    • N Sum
    • union-find
  • 常用算法时间复杂度速查表
由 GitBook 提供支持
在本页
  • 1. 线性表的顺序存储实现
  • 2. 主要操作的实现
  • 2.1 初始化(建立空的顺序表)
  • 2.2 查找
  • 2.3 插入(在第 个位置上插入一个值为 的新元素)
  • 2.4 删除(删除表的第 个位置上的元素)

这有帮助吗?

  1. 线性表

顺序表

线性表的顺序存储实现

1. 线性表的顺序存储实现

利用数组的 连续存储空间顺序存放 线性表的各元素

下标 i

0

1

i - 1

i

n - 1

MAXSIZE - 1

Data

-

typedef struct LNode* List;
struct LNode {
    ElementType Data[MAXSIZE];
    int Last;
};

struct LNode L;
List PtrL;

// 访问下标为 i 的元素:L.Data[i] 或 PtrL->Data[i]
// 线性表的长度:L.Last+1 或 PtrL->Last+1

2. 主要操作的实现

2.1 初始化(建立空的顺序表)

List MakeEmpty() {
    List PtrL;
    PtrL = (List)malloc(sizeof(struct LNode));
    PtrL->Last = -1;
    return PtrL;
}

2.2 查找

int Find(ElementType X, List PtrL) {
    int i = 0;
    while (i <= PtrL->Last && PtrL->Data[i] != X)
        i++;
    if (i > PtrL->Last)  // 如果没有找到,返回 -1
        return -1;
    else  // 找到后返回的是存储位置
        return i;
}
void Insert(ElementType X, int i, List PtrL) {
    int j;
    if (PtrL->Last == MAXSIZE - 1) {
        printf("表满\n");
        return;
    }
    if (i < 1 || i > PtrL->Last + 2) {  // 1 <= i <= n + 1
        printf("位置不合法\n");
        return;
    }
    for (j = PtrL->Last; j >= i - 1; j--)
        PtrL->Data[j + 1] = PtrL->Data[j];
    PtrL->Data[i - 1] = X;
    PtrL->Last++;
    return;
}
void Delete(int i, List PtrL) {
    int j;
    if (i < 1 || i > PtrL->Last + 1) {
        printf("不存在第%d个元素\n", i);
        return;
    }
    for (j = i; j <= PtrL->Last; j++)
        PtrL->Data[j - 1] = PtrL->Data[j];
    PtrL->Last--;
    return;
}
上一页线性表下一页链表

最后更新于4年前

这有帮助吗?

查找成功的平均比较时间为 (n+1)/2(n + 1) / 2(n+1)/2 ,平均时间性能为 O(n)O(n)O(n)

2.3 插入(在第 i(1≤i≤n+1)i (1 \le i \le n + 1)i(1≤i≤n+1) 个位置上插入一个值为 XXX 的新元素)

平均移动次数为 n/2n/2n/2 ,平均时间性能为 O(n)O(n)O(n)

2.4 删除(删除表的第 i(1≤i≤n)i (1 \le i \le n)i(1≤i≤n) 个位置上的元素)

平均移动次数为 (n−1)/2(n-1)/2(n−1)/2 ,平均时间性能为 O(n)O(n)O(n)

⋯\cdots⋯
⋯\cdots⋯
⋯\cdots⋯
a1a_1a1​
a2a_2a2​
⋯\cdots⋯
aia_iai​
ai+1a_{i+1}ai+1​
⋯\cdots⋯
ana_nan​
⋯\cdots⋯