线性数据结构

1.数组

数组使用一块连续的内存来存储元素,并且元素的类型都是相同的。可以通过索引来访问。

2.链表

链表由一系列节点组成,每个节点包含两部分:数据部分和指针部分。数据部分用于存储元素的值,指针部分则指向下一个节点。没有使用连续的内存空间来存储数据。

在知道目标位置元素的上一个元素的时候,链表的插入和删除操作的复杂度为 O(1) 。但是,在查找一个节点或者访问特定位置的节点的时候复杂度为 O(n) 。

常见链表有:单链表、双向链表、循环链表、双向循环链表

单链表

单链表只有一个方向,结点只有一个后继指针 next 指向后面的节点。因此,链表这种数据结构通常在物理内存上是不连续的。我们习惯性地把第一个结点叫作头结点,链表通常有一个不保存任何值的 head 节点,通过头结点我们可以遍历整个链表。尾结点通常指向 null。

循环链表

循环链表其实是一种特殊的单链表,和单链表不同的是循环链表的尾结点不是指向 null,而是指向链表的头结点。

双向链表

双向链表包含两个指针,一个 prev 指向前一个节点,一个 next 指向后一个节点。

双向循环链表

双向循环链表最后一个节点的 next 指向 head,而 head 的 prev 指向最后一个节点,构成一个环。

3.栈

栈 (Stack) 只允许在有序的线性数据集合的一端(称为栈顶 top)进行元素的添加(push)和删除(pop)。因而按照后进先出(LIFO,Last In First Out)的原理运作。在栈中,push 和 pop 的操作都发生在栈顶。

栈常用一维数组或链表来实现,用数组实现的栈叫作 顺序栈 ,用链表实现的栈叫作 链式栈

4.队列

队列是先进先出 (FIFO,First In, First Out) 的线性表。在具体应用中通常用链表或者数组来实现,用数组实现的队列叫作顺序队列 ,用链表实现的队列叫作链式队列。队列只允许在队尾进行插入操作,在队首进行出队。

单队列

单队列就是常见的队列, 每次添加元素时,都是添加到队尾。单队列又分为顺序队列(数组实现)和链式队列(链表实现)。

循环队列

循环队列在逻辑上是一个循环的队列,可以利用数组实现。循环队列解决了普通队列在出队操作时导致的队列空间浪费的问题。

双端队列

双端队列是一种在队列的两端都可以进行插入和删除操作的队列,相比单队列来说更加灵活。

优先队列

优先队列从底层结构上来讲并非线性的数据结构,它一般是由堆来实现的。在入队和出队时有以下特点。

  • 在每个元素入队时,优先队列会将新元素插入堆中并调整堆。

  • 在队头出队时,优先队列会返回堆顶元素并调整堆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真滴book理喻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值