数据结构之线性表(链表)

来源:互联网 发布:叙利亚失败的国家 知乎 编辑:程序博客网 时间:2024/05/21 06:00

线性表是n个数据元素的有限序列。

一、线性表的顺序存储结构

用一段地址连续的存储单元依次存放线性表中的数据元素,实现方式是一维数组的方式。

顺序表的插入操作:先将被插入元素后面的所有元素向后移动一个单位,再将要插入元素插入位置(删除操作同理,先向前移动之前的元素)

优点:1.无需为表示表中元素之间的逻辑关系而增加额外的存储空间

    2.可以快速存储和读取表中任意位置的元素,时间复杂度为O(1)

缺点:1.插入和删除操作需要移动大量元素,时间复杂度为O(n)

    2.线性表长度变化较大时难以确定存储空间的容量

二、线性表的链式存储结构(链表)

对于链式存储结构来说,那一组存储单元的地址可以是连续的,也可以是不连续的。

对于链表中的一个数据元素来说,分为两个区域:一个是数据域,用于存储数据元素信息;一个是指针域,存储后继元素的地址。这两部分合起来称作结点。

链表有四种结构:单链表、环形链表、双向链表、静态链表(针对没有指针的高级语言)

单链表的读取:从头结点开始遍历链表,用一个指针不断指向下一个元素直到下一个为NULL,比较要读取的结点值。时间复杂度为O(n)

单链表插入新结点:先从头结点开始遍历找到插入的位置插入,然后将插入结点的前一个结点指向新结点,新结点指向下一个结点即可。(删除结点同理)时间复杂度为O(1)

环形链表:将单链表中末尾结点的指针由指向NULL变为指向头结点,就使得整个链表变为一个环形结构

双向链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域,双向链表也可以是环形结构

例:链表的C++实现


0 0
原创粉丝点击