数据结构(二)

本文介绍了线性表的基本概念、逻辑结构及其分类,详细讲解了顺序表和链表的特性。顺序表查找快速,存储效率高,但插入删除操作较慢,需要连续存储空间。链表分为单链表、双链表和循环链表,存储结构灵活,插入删除操作更快,但查找效率较低。

最近在看coursera上的慕课,感觉还挺简洁的,推荐一下:
数据结构与算法
而且有配套的slides可以学习。

第二章 线性表

2.1 线性表

线性表的概念

表目:线性表中的元素(可包含多个数据项,记录)
空表:长度为零的线性表。

线性结构

二元组B=(K,R)K为元素,R为关系
逻辑关系:前驱/后继,其性质为:

  • 反对称性:a1为a2的前驱,则a2不能为a1的前驱
  • 传递性:前驱和后继的传递

线性表逻辑结构包括:长度 表头 表尾 当前位置
线性结构的性质为:

  • 均匀性:即元素之间的数据类型和长度应该相同
  • 有序性:相对位置为线性
线性表分类
  • 按照逻辑结构分:

  • 按照存储结构分:
    顺序表:连续存储
    链表:链式存储

  • 按照线性表运算分:
    线性表:不限制操作
    栈(LIFO,后进先出):插入和删除都在同一端
    队列(FIFO,先进先出):插入操作在一端,删除在另一端

  • 按复杂程度划分:

    • 简单的:线性表、栈、队列、散列表(索引+检索)
    • 高级的:广义表、多维数组、文件
  • 按访问方式划分
    直接访问型、顺序访问型、目录索引型

2.2 顺序表

查找元素快速
插入、删除元素较慢
存储效率高
需要预先知道最大长度
需要连续存储空间

2.3 链表

分类:单链 双链 循环链

存储节点 = 数据域 + 指针域

  • 单链表(singly linked list)
    • 简单的单链表
      在这里插入图片描述
      第1个结点为head,指针域指向a0
      空表判断:head == NULL
      当前结点:curr
    • 带头结点的单链表
      在这里插入图片描述
      第1个结点:head -> next, head ≠ NULL
      空表判断:head -> next = NULL
      当前节点a1 : fence -> next (fence为前驱)
  • 双链表(double linked list)
    元素 = prev + data + next
    在这里插入图片描述
  • 循环链表(circularly linked list)
    将单链表/双链表的头尾结点相连
    在这里插入图片描述
    没有增加额外开销 更方便
    注意:单链表尾结点:an-1 -> next = NULL,但循环链表为:an-1 -> next = head
2.4 顺序表和链表的比较
顺序表链表
存储数据特点适合存储静态数据适合存储动态数据
插入、删除操作速度慢,时间复杂度O(n)速度快,时间复杂度O(1)
查找操作速度快,时间复杂度O(1)速度慢,时间复杂度O(n)
存储结构存储需要连续空间存储使用动态空间
存储效率存储效率高每个元素都有结构性存储开销
长度估计需要预先估计最大长度无需事先了解线性表长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值