基本数据结构-堆,栈,队列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40042143/article/details/85018732

栈stack:先进后出(last in ,first oute)

队列(queue):先进先出(first in,first out)

链表(link list)


线性表

特点:在元素的有限集中,除第一个元素无直接前驱,最后一个元素无直接后驱外,每个数据元素有且仅有一个直接前驱元素和一个直接后续元素。

线性表用一组地址连续的存储单元一次存储线性表的数据元素。假设每个数据元素占k个存储单元,并以元素所占的第一个存储单元的地址作为数据元素的存储地址。

地址关系如下:

线性表的顺序存储如下图:

 

顺序查找:平均时间复杂度

线性表的链式存储

单链表:存储数据的单元通过指针串接起来形成

单链表包含首结点和尾结点,尾结点的next为null空。单链表只能通过前驱结点找到后续结点

单链表的查找只能从首结点开始

单链表的插入操作:

单链表进行顺序查找和在数组中的查找具有相同的时间复杂度

单链表在已知特定结点引用的前提下完成数据元素的插入与删除操作要比数组中快

 

双向链表:

 

双向链表和单链表的对比:

关于查找

双向链表的查找既可以从链表的首结点开始,也可以从链表的尾结点开始

单链表的查找只能从链表的首结点开始

关于插入

单向链表:除了首结点之外必须在某个已知的结点后面进行

双向链表:在已知结点的前后都可以插入

 

关于删除

单链表:在除了首结点之外必须知道待删除结点的前驱结点才行

双向链表:在已知某个结点引用的前提下就可以完成结点自身的删除

 

 

线性表顺序存储和链式存储的比较

查找

基于序号的查找:数组随机存取的特性,在线性表的顺序存储可以在

        在链式存储中需要从头结点开始遍历下去,无法在常数时间完成------因此,在基于序号的查找顺序存储优越于链式存储

基于元素的查找:顺序存储和链式存储都需要从序号为0的元素开始依次查找,性能相同。

 

删除,插入

对于基于数据元素,若用数组实现操作,需要先采用顺序查找定位相应的数据元素,然后才能插入、删除,并且在插入和删除过程中需要移动大量元素;对于链表只需要在定位数据元素的基础上,修改指针的指向即可完成--------因此,链式存储由于顺序存储

对于基于序号的插入、删除,顺序存储中需要移动一半元素,链式存储不能直接定位,评价需要比较一半的元素才能定位------因此,二者性能相当

如果线性表的使用中主要时插入、删除操作,则选用链式存储的线性表更好

 


栈---餐馆里装有弹簧的摞盘子,盘子取出的顺序刚好和装入栈的顺序相反,只有最上面的盘子才能取下来。

仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除操作。

栈顶:top,栈顶元素;栈底:bottom

insert操作:push

delete操作:pop

空栈:不能执行弹出操作,否则栈下溢(underflow)

 

 


队列queue---类似收银台排队结账的一排顾客。

insert操作:enqueue

delete操作:dequeue

对头head,队尾tail,当有一个元素入队时被放在队尾的位置,出队的元素在队头

队列的上溢和下溢

当head=tail时为空队列,如果试图从空队列删除元素,则发生队列下溢

head=tail+1,队列时满的,若试图插入一个元素,则队列发生上溢


猜你喜欢

转载自blog.csdn.net/weixin_40042143/article/details/85018732
今日推荐