[数据结构与算法] 3,线性表
来源:互联网 发布:腾讯视频播放器mac 编辑:程序博客网 时间:2024/05/17 22:45
1 线性表的定义
零个或多个数据元素的有限序列。序列指数据元素之间是有顺序的,若有多个元素,那么第一个元素无前驱,最后一个元素无后继。其它每个元素都有前驱后继。
2 线性表的抽象数据类型
3 线性表的顺序存储结构
定义:用一段地址连续的存储单元依次存储线性表中的数据元素。(C语言中的一维数组)
顺序存储结构线性表的结构代码
三个重要的属性:
1) 存储空间的存储位置:数组data的存储位置。
2)线性表的最大存储容量:MAXSIZE
3)线性表的当前长度:length
4 顺序存储结构下线性表的操作
1)取出操作 时间复杂度:O(1)
2)插入操作 时间复杂度:最坏O(n),平均时间复杂度也是一样
3) 删除操作 时间复杂度O(n),平均也是
5 线性顺序存储结构的优缺点
6 线性表的链式存储结构
头节点:为了操作方便,在第一个节点前增加一个头节点,数据域可以不存储任何信息,也可以放一些公共信息,如下图:
头节点跟头指针的区别:
C语言结构指针描述单链表的:
7 单链表的操作
1)读取操作: 时间复杂度:O(n)
2)插入操作:代码顺序不可相反,可以想想为什么
3)删除操作:
8,单链表结构跟顺序存储结构优缺点
如果线性表需要频繁查找,很少进行插入删除操作,那么适合用顺序存储结构,如果需要频繁插入删除操作,那么适合用链式存储结构,单链表。
比如在游戏开发中,用户注册的信息,除了用户注册外,其余时候我们都是读取,所以应该考虑顺序存储结构。
比如玩家的装备总是在变化,可能增加或者删除,那么适合用单链表。实际情况往往复杂很多。
9,循环链表
将单链表的终端节点的NULL指针改为指向头节点或者开始节点,这就使得整个单链表形成一个环,这种头尾相连的链表称为循环链表(circular linked list)
那么,循环链表判断循环结束的标志就是p->next等于头节点或者开始节点,则循环结束。
10,双向链表(double linked list)
双向链表就是多设置了一个指向前驱节点的指针。
、
双向链表的插入操作:
删除操作:
11,总结
- 数据结构与算法3:线性结构与线性表-链表
- [数据结构与算法] 3,线性表
- 数据结构与算法 线性表
- 数据结构与算法--线性表
- 数据结构与算法---线性表
- 数据结构与算法--线性表
- 数据结构与算法(day-3)线性表
- 数据结构与算法(C#)--线性表
- 算法与数据结构(1)--线性表
- 数据结构与算法(5)--线性表
- 数据结构与算法(二)线性表
- 数据结构与算法之----线性表
- 数据结构与算法-----双向线性链表
- 【数据结构与算法分析】线性表
- 数据结构与算法(线性表)
- 数据结构与算法-02线性表-01
- 算法与数据结构(1)--线性表
- 数据结构与算法分析之线性表
- LeetCode-remove-element
- cell重用出错
- 集合详解之HashMap
- java设计模式-模板方法模式
- java SSLSocket的详解
- [数据结构与算法] 3,线性表
- 简单谈hashmap hashtable linkedhashmap treemap的区别
- spring 异步处理
- 我眼中的java线程池实现原理
- php审计基础二:命令执行
- PATA-1008Elevator (20)
- c++primer笔记--2.1基本内置类型
- OpenCV 各种滤波器的简单使用
- POJ 1077 Eight(bfs八数码问题)