分别使用LinkedList和数组实现栈

本文详细介绍了使用LinkedList和数组两种方式实现栈的数据结构,包括数据的压入、弹出及判断栈是否为空的操作,对比了两种实现方式的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用LinkedList类实现将数据压入栈、弹出栈、判断栈是否为空。

首先说明一下为什么使用LinkedList类
 |- ArrayList: 它表示内部是使用数组来模拟List的功能,添加和删除的时候效率比较低,查询的时候可以进行随机查找且效率高。
 |- LinkedList: 它表示内部是使用链表(单链表,双链表,循环链表)来创建的List,添加和删除的时候效率比较高,查询的时候需要顺序查找。
 而栈需要频繁的插入或删除元素,故使用LinkedList类效率较高。

实现代码如下:

   /**
    * 其中addLast()、removeLast都指向的是栈顶;
    * addFirst、removeFirst都指向的是栈底;
    */
 class OneStack{
     private LinkedList link ;
     public OneStack(){
         link = new LinkedList();
     }
   /**
    * 入栈,注意:addLast指向的是栈顶是指最后添加的元素
    * 
    */
     public void push(int data){
         link.addLast(data);
     }
    /**    
     * 出栈,返回栈顶元素并删除,
     * 注意:removeLast是指删除最后入栈的那个元素
     */
     public int pop(){
     return (int) link.removeLast();
     }
     /**
      * 查看栈顶元素
      * 注意:当栈没有元素会报异常  
      */
    public int peek(){
     return (int)link.getLast();
    }
   /**   
    * 判断栈是否为空,返回 boolean值,
    * 直接调用LinkedList的isEmpty()方法。
    */
     public boolean empty(){
         return link.isEmpty();
     }
 }
 //测试
 package zhan;
 import java.util.LinkedList;
 public class Zhan{
  public static void main(String[] args) {
    OneStack st =new OneStack();
        st.push(1);
        System.out.println("此时栈顶元素为:  "+st.peek());
        st.push(2);
        System.out.println("此时栈顶元素为:  "+st.peek());
        System.out.println(st.pop());
        System.out.println(st.empty());
        System.out.println(st.pop());
        System.out.println(st.empty());
   }
}

测试结果如下:
在这里插入图片描述

二、使用数组实现将数据压入栈、弹出栈、判断栈是否为空。

代码实现如下:

//栈底层用数组实现
class TwoStack{
 private int[] arr;
 private int top;
 /**
  * 默认无参构造函数
  */
  public TwoStack(){
  arr=new int[3];
  top=-1;
  }
  /**
   * 带参数的构造函数
   */
  public TwoStack(int maxsize){
   arr=new int[maxsize];
   top=-1;
  }
  /**
   * 将数据压入栈
   */
  public void push(int x){
   arr[++top]=x;
  }
  /**
   * 出栈,返回栈顶元素并删除
   */
  public int pop(){
   return arr[top--];
  }
  /**
   * 查看栈顶元素
   */
  public int peek(){
   return arr[top];
  }
  /**
   * 判断栈是否为空,返回 boolean值
   */
  public boolean isEmpty(){
   return top==-1;
  }
  /**
   * 判断栈是否满了,返回boolean值
   */
  public boolean isFull(){
   return top==arr.length-1;
  }
}
//测试
public static void main(String[] args) {
  //初始化栈大小,若不初始化则调用默认构造函数,栈大小为3
  TwoStack ts=new TwoStack(2);
  ts.push(22);
  System.out.println("此时栈顶元素为:  "+ts.peek());
  ts.push(11);
  System.out.println("此时栈顶元素为:  "+ts.peek());
  System.out.println(ts.isFull());
  System.out.println(ts.pop());
  System.out.println(ts.isEmpty());
  System.out.println(ts.pop());
  System.out.println(ts.isEmpty());
  System.out.println(ts.isFull());
  }

测试结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值