数据结构---栈和队列
创始人
2024-04-23 13:30:36

栈和队列

    • 入栈
    • 出栈
    • 栈的JAVA实现
  • 队列
    • 入队
    • 出队
    • 循环队列

栈和队列。这两者都属于逻辑结构,它们的物理实现既可以利用数组,也可以利用链表来完成。

栈(stack)是一种线性数据结构,它就像一个上图所示的放入乒乓球的圆筒容器,栈中的元素只能先入后出(First In Last Out,简称FILO)。
最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶
(top)。

在这里插入图片描述
在这里插入图片描述
栈的数组实现
在这里插入图片描述
栈的链表实现
在这里插入图片描述

入栈

入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶。

出栈

出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素的前一个元素将会成为新的栈顶。

栈的JAVA实现

package dataStructure.myStack;import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.EmptyStackException;public class myStack {private Object[]arr;//数组默认长度private int stackLength=4;private int size;//指针private int index = -1;//判断栈是否为空public boolean empty(){return this.size==0;}//获取栈顶元素public E pop(){if(this.index==-1){throw new IndexOutOfBoundsException("空栈,无法取元素");}this.size--;return (E) this.arr[index--];}/*** 数组初始化或者以 1.5 倍容量对数组扩容*/private void capacity(){if(this.arr==null){this.arr = new Object[this.stackLength];}if(this.size-(this.stackLength-1)>=0){this.stackLength = this.stackLength+this.stackLength/2;this.arr = Arrays.copyOf(this.arr,this.stackLength);}}//向栈容器添加元素public E push(E item){this.capacity();this.arr[++index]=item;this.size++;return item;}public static void main(String[] args) {myStack myStack = new myStack<>();myStack.push("a");myStack.push("b");myStack.push("c");System.out.println(myStack.pop());System.out.println(myStack.empty());System.out.println(myStack.pop());System.out.println(myStack.pop());System.out.println(myStack.empty());System.out.println(myStack.pop());}}

队列

队列(queue)是一种线性数据结构,它的特征和行驶车辆的单行隧道很相似。不同于栈的先入后出,队列中的元素只能先入先出(First In First Out,简称(FIFO)。队列的出口端叫作队头(front),队列的入口端叫作队尾(rear)。

队列这种数据结构既可以用数组来实现,也可以用链表来实现。

队列数组实现
在这里插入图片描述

队列链表实现
在这里插入图片描述

入队

入队(enqueue)就是把新元素放入队列中,只允许在队尾的位置放入元素,新元素的下一个位置将会成为新的队尾。
在这里插入图片描述

出队

出队操作(dequeue)就是把元素移出队列,只允许在队头一侧移出元素,出队元素的后一个元素将会成为新的队头。
在这里插入图片描述

循环队列

数组实现的队列可以采用循环队列的方式来维持队列容量的恒定。
以利用已出队元素留下的空间,让队尾指针重新指回数组的首位。
在物理存储上,队尾的位置也可以在队头之前。当再有元素入队时,将其放入数组的首位,队尾指针继续后移即可。
队列满的条件:(队尾下标+1)%数组长度 = 队头下标
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...