数据结构复习--线性表

线性表复习提纲

线性表的基本操作:

  • 初始化
  • 销毁
  • 判断为空
  • 求长度
  • 输出
  • 查找
    • 按位查找
    • 按值查找
  • 插入
  • 删除

线性表的存储结构

  • 顺序存储结构
  • 链式存储结构
    • 单链表
    • 双链表
    • 循环链表

顺序表

顺序表的类型定义
typedef ElemType char;

typedef struct
{
    ElemType data[MAXSIZE];
    //线性表的长度
    int length;
}SqList;
顺序表的基本操作

见上方线性表的基本操作

顺序表典型例题
1.设顺序表L有10个整数。设计一个算法,以第一个元素为分界线(基准),将所有小于等于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。

解题思路:用两个变量i,j同时从顺序表的前后开始扫描,j遇到小于等于的元素时停止,i遇到大于的元素时停止,交换两元素位置,重复直到i=j,即是第一个元素应该插入的位置。

2.荷兰国旗问题:设有一个条块序列,每个条块为红(0)、白(1)、兰(2)三种颜色中的一种。假设该序列采用顺序表存储,设计一个时间复杂度为O(n)的算法,使得这些条块按红、白、兰的顺序排好,即排成荷兰国旗图案。

解题思路:
该算法的解题思路可以类比于上述第一题。用i、j分别指向顺序表的前后,新增变量k用来遍历顺序表,若k对应为值0,则k,i交换并各自增1,若k对应1,则k自增1,若k对应2,则j,k交换,j自减1,k不动


链表

需要知道的几点
  1. 头指针、头节点、首节点、尾指针
  2. 头节点的优势
    • 第一个节点的操作和表中其他节点的操作相一致。
    • 统一空表和非空链表的处理
  3. 存储密度

单链表
单链表的节点类型定义如下
typdef struct LNode
{
    ElemType data;
    //指向后继节点
    struct LNode *next;
}LinkNode;

单链表的特点:当访问过一个节点之后,只能接着访问它的后继节点,而无法访问它的前驱结点。

单链表表的基本操作

见上方线性表的基本操作

单链表的操作有以下几点需要注意:

  1. 建立单链表的常用方法有两种
    • 头插法
    • 尾插法
  2. 链表在进行操作时,总是需要找到其前驱结点


双链表
双链表的优点
  • 从任一节点出发可以快速找到其前驱结点和后继结点。
  • 从任一节点出发可以访问其他节点。
双链表的节点类型
typedef struct DNode
{
    ElemType data;
    //指向后继结点
    struct DNode *next;
    //指向前驱结点
    struct DNode *prior;
}DLinkNode;

循环单链表
与普通单链表相比,循环单链表的特点
  • 链表中没有空指针域
  • p所指节点为尾节点的条件:p->next == 头节点

循环双链表
与非循环双链表相比,循环双链表的特点
  • 链表中没有空指针域
  • p所指节点为尾节点的条件:p->next == 头节点
  • 从头节点找到尾节点只用一步操作

线性表的应用

好难啊,先过吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值