《栈 队列》——栈与队列(Java)

简介: 一:对列 队列是一种先进先出的数据结构 实现代码: package Queue;/* * 使用java构建队列,并模拟实现队列的入队和出对方法 */public class Queue { //队列类 private int maxSize; //定义队列...

一:对列

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

实现代码:

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


相关文章
|
3月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
139 4
|
19天前
|
存储 算法 Java
🧠Java零基础 - Java栈(Stack)详解
【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
29 2
|
2月前
|
Java API 容器
JAVA并发编程系列(10)Condition条件队列-并发协作者
本文通过一线大厂面试真题,模拟消费者-生产者的场景,通过简洁的代码演示,帮助读者快速理解并复用。文章还详细解释了Condition与Object.wait()、notify()的区别,并探讨了Condition的核心原理及其实现机制。
|
1月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
29 0
|
3月前
|
Java 索引
java中的栈(利用数组实现栈)
这篇文章通过Java代码示例介绍了如何使用数组实现栈操作,包括栈的初始化、入栈、出栈、判断栈满和空以及遍历栈的方法。
java中的栈(利用数组实现栈)
|
3月前
|
Java
java中的队列
这篇文章通过Java代码示例介绍了使用数组实现队列操作,包括队列的初始化、入队、出队、判断队列满和空以及遍历队列的方法。
java中的队列
|
4月前
|
Java 运维
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
65 2
|
4月前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
52 0
|
存储 算法 安全
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque
164 0
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque