文章目录
- 前言
- 数据结构(栈、队列、链表)
- 1、栈
- 2、队列
- 3、链表
- 3.1、单向链表结构
- 3.2、双向链表结构
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
数据结构(栈、队列、链表)
1、栈
概述:
1)一种特殊的线性表,仅能在线性表的一端操作;
2)栈顶允许操作,栈底不允许操作;
3)先进后出,或者说是后进先出;
术语:
进入栈的过程叫做进栈;
出去栈的过程叫做出栈;
栈的最上面的元素称为栈顶;
栈的最内的元素,称为栈底;
例子 :1、2、3、4、5
1、2、3依次进栈,
然后出栈、3、2
在进栈4、5
过程如下:
2、队列
概述:
1)一种特殊的线性表
2)先进先出
3)只允许在队列头进行删除操作
4)只允许在队列尾进行插入操作
术语:
进行插入操作叫做入队;
进行删除操作叫做出队;
示例:
3、链表
概述:
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
3.1、单向链表结构
术语:
1)item:数据域
2)next:指针域
3)node:节点
4)head:头指针
说明:
head指向链表中第一个节点;
链表中最后一个节点指向null;
当链表中无节点的时候,head指向null;
特点:
1)当链表创建时,无需考虑创建的大小,且大小可以无限延续;
2)访问元素时,链表无法跳过前一节点访问后续节点,即无法通过下标进行访问,只能从头遍历,找到想要访问的元素;
3)链表在插入和删除时,时间复杂度O(1),效率较高;
4)链表查找效率低;
注意事项:
在java中没有指针的概念,而类似的指针在java中都是通过引用来实现的,但是为了突出我们的理解,仍然通过指针进行描述,下面是用代码来描述在java中,如何用引用来实现指针的逻辑。
public LNode{
int data; //数据域
LNode next; //下一个指针的引用
}
3.2、双向链表结构
相比单链表,除了包含单链表的部分,还增加的pre前一个节点的指针。
结构说明:
双向链表不仅有head指针指向第一个节点,而且有tail指针指向最后一个节点
每一个节点由三部分组成:item储存数据、prev指向前一个节点、next指向后一个节点
双向链表的第一个节点的prev指向null
双向链表的最后一个节点的next指向null
特点:
双向链表即可从头遍历到尾,也可以从尾遍历到头,因为双向链表的过程是相向的,
因为它既有指向前一个节点的指针也有指向后一节点的指针;