数据结构02_线性表

线性表的基本概念与实现

线性表的逻辑结构

  1. 逻辑结构:对数据之间的关系描述
  2. 线性表的逻辑结构:只有一个表头元素 + 一个表尾元素 + 表头元素没前驱 + 表尾元素没后继 + 其它元素只有一个前驱和一个后继

线性表的存储结构

  1. 存储结构:也叫物理结构,是数据逻辑结构在计算机中的表示
  2. 常见的四中存储结构:顺序 + 链式 + 索引 + 散列
  3. 线性表的存储结构:顺序存储结构(顺序表) + 链式存储结构(链表)
    1)顺序表:根据数据元素的逻辑结构,从指定的储存位置开始,分配一个连续的存储空间
    2)链表:一个数据元素对应一个结点,结点不仅包含数据元素本身的信息,还包含数据元素之间的逻辑信息,譬如说单链表中就包含了下一个结点的信息
  4. 两种存储结构的比较
    顺序表:随机访问特性 + 占用连续的存储空间 + 内存静态分配 + 插入删除操作可能要移动元素
    链表:不支持随机访问特性 + 不是占用连续的存储空间 + 动态分配 + 插入删除操作无需移动元素
  5. 链表的五种形式
    1、单链表(head + next)
    ①带头结点的单链表:有一个头结点作为标志位,判空操作为:head->next == null;
    ②不带头结点的单链表:判空为head==null
    2、双链表(next + previous)
    3、循环单链表
    4、循环双链表
    5、静态链表(不是重点)

线性表的基本操作

  1. 线性表的定义:具有相同特性数据元素的一个有限序列(类比数组)
  2. 线性表根据存储结构分类:顺序存储表(顺序表) + 链式存储结构(链表)

线性表的结构定义

  1. 顺序表
#define maxSize 100
type struct {
    int data[maxSize];
    int length;
}Sqlist;
  1. 链表
typedef struct LNode(DLNode) {
    int data;
    struct LNode(DLNode) *prior;//双链表
    struct LNode(DLNode) *next;
}

顺序表的基本操作
顺序表 + 有序 + 查找 + 插入 + 删除

1. 查找:int locationElem(Sqlist L, int x);
2. 插入:void insert(Sqlist &L, int x); //&表示顺序表会变化 + 插入时要注意数据元素往后移位(从后往前移) + 查找该元素放入插入的位置 + L.length增加1.
3. 删除:void delete(Sqlist &L, int p, int &e);//移位(从前往后移位) + 被删除的元素赋值给e + length减1

单链表的基本操作

链表的操作一般要这样想:如果涉及到链表的移动,一定会先初始化一个指针P指向要访问的结点 + 如果涉及到遍历就要用到循环 + 循环条件一般是到达最后一个结点 + 初始化一个链表结点时,将结点指向null + 全部逻辑实现完之后还要想想:最后一个结点有没有指向null&有没有要释放内存空间的结点(删除)
1. 有序链表A和链表B的合并成C
① 链表指针 + 会变化 *&
② 初始化的结点指针为p(指向链表A中带比较的结点),q(指向B中待比较的结点)r(C最后一个结点)
见《数据结构高分笔记》P28
2. 链表的创建:头插法 + 尾插法(P29)
3. 链表的结点的删除(记得释放内存)和插入
4. 扩展:双向链表的操作:创建 + 插入 + 删除

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