java 数据结构之栈与队列

发布时间 - 2026-01-11 02:32:26    点击率:

java 数据结构之栈与队列

一:对列

队列是一种先进先出的数据结构

实现代码:

package Queue; 
 
/* 
 * 使用java构建队列,并模拟实现队列的入队和出对方法 
 */ 
 
public class Queue {   //队列类 
 
  private int maxSize; //定义队列的长度 
  private int[] arrQueue;   //队列 
  private int rear;   //定义队列的尾指针 
  private int front;  //定义队列的头指针 
  private int empty; //元素的个数 
   
  public Queue(int s)  //初始化构造函数 
  { 
    maxSize = s; 
    arrQueue = new int[s]; 
    rear = -1; 
    front=0; 
    empty = 0; 
  } 
   
  //实现插入方法 
  public void insert(int m) 
  { 
    if(rear == maxSize-1)  //处理循环 
      rear = -1;    
    arrQueue[++rear] = m;  //对尾指针加一,把值放在队列结尾 
    empty++;   //队列元素个数加1 
    System.out.println("队列入队元素 为:" + m); 
  } 
   
  //实现出栈的方法,即取得队列的头元素 
  public int remove() 
  { 
    int temp = arrQueue[front++]; //将栈顶元素赋值给temp,栈顶指针加1 
    if(front == maxSize) //处理循环 
      front = 0; 
    empty--; //元素个数-1 
    return temp; 
  } 
   
  //判断队列是否为空 
  public boolean isEmpty() 
  { 
    return (empty==0); 
  } 
   
  //判断对列是否为满 
  public boolean isFull() 
  { 
    return (empty == maxSize); 
  } 
   
  //返回队列长度 
  public int qLong() 
  { 
    return empty; 
  } 
   
  public static void main(String[] args) { 
    Queue q = new Queue(5); //初始化队列为5个元素 
     
    q.insert(1); 
    q.insert(2); 
    q.insert(3); 
    q.insert(4); 
    q.insert(5); 
     
    int t1 = q.remove(); 
    System.out.println("队列元素出队:" + t1); 
    int t2 = q.remove(); 
    System.out.println("队列元素出队:" + t2); 
     
    System.out.println("队列是否为空:" + q.isEmpty()); 
    System.out.println("队列是否为满:" + q.isFull()); 
    System.out.println("队列的长度:" + q.qLong()); 
  } 
   
} 

二:栈

栈是一种先进后出的数据结构

1:使用数组模拟栈

package Statck; 
/* 
 * 使用java构建栈,并模拟实现栈的入栈和出栈方法 
 * 使用数组实现 
 */ 
 
public class Statck1 { 
 
  private int maxSize;   //栈的最多元素数 
  private int top;  //栈顶指针 
  private int len;   //栈的深度 
  private int[] arrStack; // 模拟栈 
   
  //栈的初始化 
  public Statck1(int s){ 
    maxSize = s; 
    len =0; 
    top= -1; 
    arrStack = new int[s]; 
  } 
   
  //获取栈的长度 
  public int getLen(){ 
    return len; 
  } 
   
  //获取当前栈还能插入多少个f元素 
  public int getLeaveLen(){ 
    return (maxSize-len); 
  } 
  //判断栈是否满 
  public boolean isFull(){ 
    return (len==maxSize); 
  } 
   
  //判断栈是否为空 
  public boolean isEmpty(){ 
    return (len ==0); 
  } 
   
  //元素入栈 
  public void inStack(int s) 
  { 
    arrStack[++top] = s; //栈顶指针加1,入栈 
    System.out.println("元素入栈:" + s); 
    len ++ ;//栈深度+1 
  } 
   
  //元素出栈 
  public int outStack() 
  { 
    int temp = arrStack[top--];//赋值之后减1 
    System.out.println("元素出栈:" + temp); 
    len--;  //栈深度-1 
    return temp; 
  } 
   
  public static void main(String[] args) { 
    Statck1 s = new Statck1(5); 
     
    s.inStack(1); 
    s.inStack(2); 
    s.inStack(3); 
    s.inStack(4); 
    s.inStack(5); 
     
    s.outStack(); 
    s.outStack(); 
    System.out.println("栈的长度:" + s.getLen()); 
    System.out.println("还能入栈元素个数:" + s.getLeaveLen()); 
    System.out.println("栈的是否为空:" + s.isEmpty()); 
    System.out.println("栈的是否为满:" + s.isFull()); 
  } 
} 

2:使用链表模拟栈

package Statck; 
 
import java.util.ArrayList; 
import java.util.EmptyStackException; 
import java.util.List; 
 
/* 
 * 使用java构建栈,并模拟实现栈的入栈和出栈方法 
 * 使用链表实现 
 */ 
 
public class Statck2<E extends Object> {  
   
  private List<E> statck = new ArrayList<E>();  
   
  public Statck2(){ 
       //栈的初始化 
  } 
   
  //清空栈 
  public void clear(){ 
    statck.clear(); 
    System.out.println("清空栈.........."); 
  } 
  //判断栈是否为空 
  public boolean isEmpty(){ 
    return statck.isEmpty(); 
  } 
  //获取栈顶元素 
  public E getTop(){ 
    if(isEmpty()) 
      return null; 
    return statck.get(0); 
  } 
   
  //弹出栈操作 
  public E pop(){ 
    if (isEmpty())  
      throw new EmptyStackException();  
    System.out.println(statck.size() + "\t 出栈"); 
    return statck.remove(statck.size() - 1);  
  } 
   
  //压入栈操作 
  public void push(E e){ 
    statck.add(e); 
    System.out.println(e + "\t 入栈"); 
  } 
   
  //获取当前栈的深度 
  public int getStatckSize(){ 
    if(isEmpty()) 
      throw new EmptyStackException(); 
    return statck.size(); 
  } 
   
  public static void main(String[] args) { 
    Statck2 s = new Statck2(); 
    s.clear();      //清空栈 
    System.out.println("当前栈是否为空:" + s.isEmpty()); 
    s.push(1); 
    s.push(2); 
    s.push(3); 
     
    s.pop(); 
    System.out.println("当前栈的深度为:" + s.getStatckSize()); 
    System.out.println("当前栈顶元素为:" + s.getTop()); 
  } 
   
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论,大家共同进步!


# java  # 栈与队列  # 栈和队列的实现  # java中栈和队列的详解  # java 数据结构中栈和队列的实例详解  # Java深入了解数据结构之栈与队列的详解  # Java 栈和队列的相互转换详解  # Java栈和基础队列的实现详解  # 一起来学习Java的栈和队列  # Java 栈与队列实战真题训练  # Java 栈与队列超详细分析讲解  # Java使用跳转结构实现队列和栈流程详解  # Java线性结构中栈、队列和串的基本概念和特点详解  # Java常见的数据结构之栈和队列详解  # Java 栈和队列的交互实现  # 为空  # 数据结构  # 是一种  # 清空  # 还能  # 链表  # 放在  # 如有  # 希望能  # 弹出  # 谢谢大家  # 多少个  # 共同进步  # 出对  # 疑问请  # println  # qLong  # insert  # static  # System 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速完成中国万网建站详细流程?  b2c电商网站制作流程,b2c水平综合的电商平台?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel如何实现事件和监听器?(Event & Listener实战)  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  香港服务器选型指南:免备案配置与高效建站方案解析  高防服务器租用指南:配置选择与快速部署攻略  如何在腾讯云服务器快速搭建个人网站?  详解CentOS6.5 安装 MySQL5.1.71的方法  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Windows Hello人脸识别突然无法使用  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何在云指建站中生成FTP站点?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  电商网站制作价格怎么算,网上拍卖流程以及规则?  简单实现jsp分页  javascript日期怎么处理_如何格式化输出  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何快速生成高效建站系统源代码?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  怎么用AI帮你为初创公司进行市场定位分析?  EditPlus 正则表达式 实战(3)  如何快速查询域名建站关键信息?  如何在景安服务器上快速搭建个人网站?  如何在云主机上快速搭建多站点网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  英语简历制作免费网站推荐,如何将简历翻译成英文?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何快速搭建个人网站并优化SEO?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  iOS UIView常见属性方法小结  如何在云主机上快速搭建网站?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何在VPS电脑上快速搭建网站?  利用python获取某年中每个月的第一天和最后一天  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Python并发异常传播_错误处理解析【教程】  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势