首页 > 其他分享 >数据结构篇——栈和队列

数据结构篇——栈和队列

时间:2022-11-17 08:00:16浏览次数:49  
标签:return 队列 void int 数据结构 public 模拟

数据结构篇——栈和队列

本次我们介绍基础算法中的栈和队列,我们会从下面几个角度来介绍:

  • 栈和队列简述
  • 模拟栈
  • 模拟队列

栈和队列简述

首先我们要简单了解一下栈和队列:

  • 栈:数据元素先进后出
  • 队列:数据元素先进先出

我们分别给出展示图:

模拟栈

我们下面给出用数组模拟栈的写法:

public class Stack {
    
    // 固定长度
    final int N = 1000010;
    
    // 栈(栈元素从下标1开始)
    int[] stk = new int[N];
    
    // 栈指针(永远指在栈顶)
    int t = 0;
    
    public static void main(String[] args) {
        // 测试代码
    }

    /**
     * 推入操作
     * @param x
     */
    public void push(int x){
        stk[++t] = x;
    }

    /**
     * 弹出操作
     */
    public void pop(){
        t--;
    }

    /**
     * 判断是否为空
     */
    public boolean isEmpty(){
        if (t > 0){
            return false;
        }else {
            return true;
        }
    }

    /**
     * 返回栈顶元素
     * @return
     */
    public int stkTop(){
        return stk[t];
    }
    
}

模拟队列

我们下面给出用数组模拟队列的写法:

public class Queue {
    
    // 定义一个队列大小
    final int N = 100010;
    
    // 定义队列
    int[] queue = new int[N];
    
    // 定义队头和队尾
    int head = 1;
    int tail = 0;
    
    public static void main(String[] args) {
        // 测试代码
    }

    /**
     * 添加操作
     * @param x
     */
    public void add(int x){
        queue[++tail] = x;
    }

    /**
     * 弹出操作
     */
    public void pop(){
        if (head <= tail){
            // 说明有值,可以删除
            head++;
        }else {
            // 说明无值,无法删除
            System.out.println("无法删除");
        }
    }

    /**
     * 得到队头元素
     * @return
     */
    public int getHead(){
        return queue[head];
    }

    /**
     * 得到队尾元素
     */
    public int getTail(){
        return queue[tail];
    }

    /**
     * 是否为空
     */
    public boolean isEmpty(){
        if (head <= tail){
            return false;
        }else {
            return true;
        }
    }

    /**
     * 队列长度
     */
    public int getLong(){
        return tail-head+1;
    }
}

结束语

好的,关于数据结构篇的栈和队列就介绍到这里,希望能为你带来帮助~

附加

《表达式求值》问题由于涉及数,哈希等内容在后续会在该文章补充~

标签:return,队列,void,int,数据结构,public,模拟
From: https://www.cnblogs.com/qiuluoyuweiliang/p/16898233.html

相关文章

  • 数组模拟各类数据结构
    数组模拟各类数据结构 Hash(散列)  并查集   Trie树 堆映射版本堆,Dijkstra需要用到 堆排序  链表  栈与队列......
  • C语言《数据结构与数据库/操作系统》实验测试数据集
    C语言《数据结构与数据库/操作系统》实验测试数据集实验二、栈的应用注意需要根据实验内容文件实现相应的数据结构——栈,以及菜单(程序要能循环使用,不要计算一次就必须重......
  • Linux下进程间通信方式之管道、信号、共享内存、消息队列、信号量、套接字
    /*1,进程间通信(IPC)Inter-ProcessCommunication比较好理解概念的就是进程间通信就是在不同进程之间传播或交换信息。2,linux下IPC机制的分类:管道、信号、共享内存、......
  • RabbitMq延迟队列
    RabbitMq延迟队列延迟队列概念延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队......
  • 「Java数据结构」手撕数组队列及环形数组队列。
    目录​​一、队列​​​​1、基本介绍​​​​2、示意图​​​​3、队列的特点​​​​二、数组模拟队列​​​​1、数组队列初始化​​​​2、判断方法​​​​3、增删改查......
  • 线性与树型数据结构可视化模拟器
    线性与树型数据结构可视化模拟器题目2:线性与树型数据结构可视化模拟器[问题描述]数据结构课程是计算机类专业的核心课程之一,是计算机科学与技术必修的专业基础课程。数......
  • 080_阻塞队列 BlockingQueue
    目录简介演示代码抛出异常add()添加元素队列已满时抛出异常remove()移除元素为空时抛出异常有返回值,不抛出异常offer()添加元素队列已满时返回false不抛异常poll()移除......
  • 数据结构之动态规划 斐波那契数列&最长公共子序列
    $fib()$递归$fib(n)=fib(n-1)+fib(n-2):{0,1,1,2,3,5,8,……}$复杂度计算$T(0)=T(1)=1;T(n)=T(n-1)+T(n-2)+1,n>1$令$S(n)=\frac{[T(n)+1]}{2}$//这是要去掉......
  • redis底层都有哪些数据结构?带你了解redis是如何存储数据的
    文章目录​​写在前面​​​​键值对的存储——哈希​​​​哈希冲突​​​​redis解决哈希冲突过多的方式——rehash​​​​双向链表​​​​数组​​​​压缩链表​​​......
  • 数据结构
    \(log1+log2+log3+……+logn=O(nlogn)\)\(1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+……\frac{1}{n}=O(logn)\)减而治之是与递归相关的,每经过一层递归,问题的规模都会缩小,......