赞
踩
线性结构:数据元素之间,一对一的关系。
线性表,简称表,是指n个相同类型的数据元素组成的有限序列。
例如Java的数组;
线性表的顺序存储结构叫做顺序表。是用一组地址连续的存储单元依次存储数据。
1.构造函数:
无参构造函数,创建一个空的顺序表,只需将顺序表长度初始化为0即可;
有参构造函数,即创建一个长度为n的顺序表。
2.求线性表的长度,获取成员便利length即可;
3.查找操作:
按位查找,直接根据下标获取即可,data[n],o(1);
按值查找,循环获取,o(n);
4.插入操作:o(n)
在某个下标处n,新增一个元素值;
需要将n后面的元素后移一位 ,需要循环后移
5.删除操作:o(n)
同第4个一致,删除第n个元素,需要将后续的元素前一位;
6.遍历操作:0(n)
线性存储存在一个缺点,新增和删除时,需要移动后续的元素,时间复杂度o(n);其次,线性表每次创建长度会初始化确定下来,不方便后续扩展,其次,还会导致存储空间“碎片化”;
(地址不连续的存储单元)
每一个存储单元,分为两部分,data数据、以及next指针(下一个元素的存储单元地址);
初始化时,头节点会指定到第一个位置,尾标志也会同步到此处;
2.1.1单链表-遍历
a:指针初始化,拿到头节点
b:循环,获取当前数据,以及,获取下一节点的指针地址;一直到拿不到为止;
2.1.2单链表-长度
a:指针初始化,拿到头节点
b:循环,获取当前数据,以及,获取下一节点的指针地址;一直到拿不到为止;其中,局部变量,count++;
2.1.3单链表-查找
按位查找,
a:指针初始化,拿到头节点
b:循环,获取当前数据,以及,获取下一节点的指针地址;一直到拿不到为止、并且位数<要查找的位数;
按值查找:
a:指针初始化,拿到头节点
b:循环,获取当前数据,以及,获取下一节点的指针地址;
当当前date等于你要查找的值时,退出返回结果即可’
2.1.4单链表-插入
例如a元素后面插入b元素:
获取a元素指针;
b.next = a.next
a,next = b 的位置;
其中:获取a元素指针;
分为两种情况,头部插入或者非头部插入:
头部插入,直接操作即可,更改next值;o(1);
否则需要循环获取到a元素的位置,在进行执行更改next操作;o(n);
2.1.5单链表-删除
同第四步基本一致,循环获取到当前元素的位置,再更改next,去除这个元素节点;
单链表可以理解为一根直线下去依次创建存储数据的,
然后循环链表可以,形成一个闭环,头节点和尾标志关联起来;尾标志下一步就是头节点;
更改元素的构成,单链和循环链表,每一个元素都是data和next构成;
而双链表则增加一个前置节点,prior,上一个节点的位置;变成了三部分;
循环双链表中求表长、按位查找、按值查找、便利等操作和单链表基本一致,不同的只是插入和删除,由于循环双链表时一种对称结构,使得某一节点之前或者之后进行插入和删除操作,就变得很容易;
总之,链表的插入删除,不需要像线性表一样移动后续元素位置,时间复杂度从o(n),变成了o(1);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。