欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 数据结构之栈与队列

程序员文章站 2024-02-13 08:17:40
java 数据结构之栈与队列 一:对列 队列是一种先进先出的数据结构 实现代码: package queue; /* * 使用j...

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()); 
  } 
   
} 

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