【数据结构与算法】Java描述:第三节:栈与队列

一、 栈(Stack)

1.1 概念 栈:

一种特殊的线性表,其只允许在固定的一端进行插入删除元素操作。

进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据在栈顶。


1.2 栈的方法:



二、队列(Queue)

2.1 概念 队列:

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。

入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头 (Head/Front)。

在Java中,Queue是个接口,底层是通过链表实现的。


2.2 队列的方法:

2.3 循环队列:

循环队列我们通过数组来实现,循环队列中通常会定义一个头指针(front)和一个尾指针(rear),用于标记队列的头部尾部位置。

头指针front指向队列的第一个元素,尾指针rear指向队列中最后一个元素的下一个位置

在循环队列中,元素的插入和删除都是在尾指针rear的位置进行,当rear到达数组的末尾时,若队列尚有空间,则rear会返回到数组的开头。

小问题:下图循环队列 我们如何把下标从7位置,挪到0位置呢

答案是:(index + 1) % length 

(7 + 1) % 8 = 0

循环列表的判空和判满

判空:一个空的循环队列。头指针和尾指针 都在零位置,所以空的时候就是,他俩下标相等时。

判满:随着数据的添加,头位置一直在向前加,满了以后,不能拿他俩相等作为判断条件,这里我们有三种方式:

1. 通过添加 size 属性记录:这种方法是在循环队列的实现中添加一个size属性,用于记录当前队列中元素的数量。当队列中元素个数等于队列的容量时,即size等于 length 时,表示队列已满。

2. 保留一个位置:在循环队列中,通常会牺牲一个位置不存储元素,这个位置可以用来区分队列是空还是满。当队列满时,队列中的元素数量会比队列的容量少一个。因此,当rear指针与front指针之间的元素数量等于 length -1 时,表示队列已满。

3. 使用标记:这种方法是在循环队列的实现中使用一个标记来表示队列是否已满。当rear指针追上front指针时,表示队列已满。在这种方法中,需要注意处理rear指针追上front指针的情况,以免造成错误的判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值