`

java-栈-队列

 
阅读更多

 

 

栈实现代码:

 

/**
 * 自定义栈
 * @author zm
 * 注意体会 pop()的arr[top--] 和 push(long num)方法的arr[++top] = num;
 *
 */
public class Stack {
	
	private long[] arr;
	private int  top;  // 栈顶元素角标位置
	
	//0 构造函数
	public Stack(){
		arr = new long[10];
		top = -1;
	}
	
	public Stack(int size){
		arr = new long[size];
		top = -1;
	}
	
	// 入栈
	public void push(long num){
		arr[++top] = num;
	}
	
	// 出栈
	public long pop(){
		return arr[top--];
	}
	
	// 查看栈顶元素
	public long peek(){
		return arr[top];
	}
	
	// 判定是否为空
	public boolean isEmpty(){
		return top == -1;
	}
	
	// 判定是否满
	public boolean isFull(){
		return top == arr.length -1;
	}
	
	
	

	public static void main(String[] args) {
		
		Stack stack = new Stack(4);
		stack.push(12);
		stack.push(29);
		stack.push(0);
		stack.push(7);
		
		System.out.println("isEmpty: " + stack.isEmpty());
		System.out.println("isFull: " + stack.isFull());
		System.out.println("lastElement: " + stack.peek());
		while(!stack.isEmpty()) {
			System.out.print(stack.pop() + " ,");
		}
		
	}

}

 

 

 

2 队列实现代码:

/**
 * 自定义队列
 * @author zm
 * 注意体会 构造函数中 front = 0; end = -1的用法, 
 * 这里用数组arr来接收数据模拟队列,那么数组的 第一个元素(即队列的头,对应角标为0)
 * 在添加方法中,继续添加,则不断向数组添加,角标不断增加--->arr[++end] = val
 * 删除方法中,对应于将数组从最左侧开始一一移除,即arr[front++], 先返回arr[0],在一处
 * 
 *
 */
public class Quene {

	// 0 数据结构
	public int[] arr;// 接收数据的容器
	private int elements;//有效数据大小
	private int front; //队头角标
	private int end;//队尾角标
	// 1 构造函数
	public Quene(){
		arr = new int[10];
		elements = 0;
		front = 0;
		end = -1;
	}
	
	public Quene(int size){
		arr = new int[size];
		elements = 0;
		front = 0;
		end = -1;
		
	}
	// 2 常用方法
	// 添加数据, 队尾添加
	public void insert(int val) {
		arr[++end] = val;
		elements++;
	}
	// 删除数据 注意 这里的删除,仅仅是利用数组来模拟删除的效果,不是真正删除,如果你遍历你对象的数组,得到的结果仍旧是 插入的数据
	public int remove() {
		elements--;
		return arr[front++];
	}
	// 查看数据, 从队头查看
	public int peek(){
		return arr[front];
	}
	// 判定是否为空
	public boolean isEmpty(){
		return elements == 0;
	}
	// 判定是否为满
	public boolean isFull(){
		return elements == arr.length;
	}
	
	
	/**
	 * @param args 
	 */
	public static void main(String[] args) {
		Quene quene = new Quene();
		quene.insert(1);
		quene.insert(2);
		quene.insert(3);
		quene.insert(4);
		quene.insert(5);
		
		System.out.println("isEmpty: " + quene.isEmpty());
		System.out.println("isFull: " + quene.isFull());
		System.out.println("the front element is: " + quene.peek());
		
		while(!quene.isEmpty()){
			System.out.print(quene.remove() + " ");
		}
	
		
	}


}

 

 

 2.1 附图:

 

 

 

 3 java实现循环队列:

/**
 * 自定义循环队列
 * @author zm
 * 和Quene类的区别仅仅在于 insert()  remove()上, 如果增加到队尾,则end指针指向-1   如果删除数据到数组尾部最后时,front指向0
 * 注意体会 insert的判定条件 if(end == arr.length - 1) 和  remove方法判定条件 if(front == arr.length)
 * 
 *
 */
public class CycleQuene {

	// 0 数据结构
	public int[] arr;// 接收数据的容器
	private int elements;//有效数据大小
	private int front; //队头角标
	private int end;//队尾角标
	// 1 构造函数
	public CycleQuene(){
		arr = new int[10];
		elements = 0;
		front = 0;
		end = -1;
	}
	
	public CycleQuene(int size){
		arr = new int[size];
		elements = 0;
		front = 0;
		end = -1;
		
	}
	// 2 常用方法
	// 添加数据, 队尾添加
	public void insert(int val) {
		if(end == arr.length - 1){
			end = -1;
		}
		arr[++end] = val;
		if(end != arr.length - 1){
			elements++;
		}
	}
	public int remove() {
		// 先得到数值, 在判定是否是最后一个元素,如果是的话,那么处理必须要返回的这个数值外,还有将头指针指向数组角标0
		int value = arr[front++];
		if(front == arr.length){
			front = 0;
		}
		elements--;
		return value;
	}
	// 查看数据, 从队头查看
	public int peek(){
		return arr[front];
	}
	// 判定是否为空
	public boolean isEmpty(){
		return elements == 0;
	}
	// 判定是否为满
	public boolean isFull(){
		return elements == arr.length;
	}
	
	
	/**
	 * @param args 
	 */
	public static void main(String[] args) {
		CycleQuene quene = new CycleQuene(3);
		quene.insert(1);
		quene.insert(2);
		quene.insert(3);
		quene.insert(4);
		//quene.insert(5);
		
		System.out.println("isEmpty: " + quene.isEmpty());
		System.out.println("isFull: " + quene.isFull());
		System.out.println("the front element is: " + quene.peek());
		
		while(!quene.isEmpty()){
			System.out.print(quene.remove() + " ");
		}
	
		/*int[] arr = quene.arr;
		for(int i=0; i<arr.length; i++){
			System.out.println(arr[i]);
		}*/
		
	}


}


结果:
isEmpty: false
isFull: true
the front element is: 4
4 2 3 

 

  • 大小: 5.1 KB
分享到:
评论

相关推荐

    Java-用数组实现栈-队列-线性列表

    Java 数组实现栈、队列和线性列表 Java 是一种广泛使用的编程语言,数组是 Java 中的一种基本数据结构。数组可以用来实现栈、队列和线性列表等数据结构。下面是使用 Java 数组实现栈、队列和线性列表的详细介绍。 ...

    回文-栈和队列

    栈和队列的基本操作及其应用 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队...

    数据结构试验2-栈和队列实验报告含源码

    在C++或Java等编程语言中,我们可以使用数组或链表来实现栈。源码可能包含实现基本栈操作的函数,如push(入栈)、pop(出栈)和peek(查看栈顶元素)。 队列(Queue)则是先进先出(FIFO,First In First Out)的...

    数据结构--表、栈、队列(java)

    本章节介绍了表、栈和队列三种重要的数据结构及其在Java中的实现方式。表作为一种灵活的线性数据结构,既可以基于数组也可以基于链表实现;栈和队列则是具有特定操作规则的特殊表。这些数据结构在算法设计和软件开发...

    Java算法练习-队列和栈

    [Java]算法练习-队列和栈

    java 栈和队列的小例子

    在Java编程语言中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们在处理数据存储和操作方面有着广泛的应用。本教程将通过一些小例子来深入理解这两种数据结构及其在Java中的实现。 栈是一种后进先出(LIFO...

    栈和队列源代码

    在计算机科学中,栈和队列是两种基本的数据结构,它们在编程中有着广泛的应用。栈被称为“后进先出”(LIFO, Last In First Out)数据结构,而队列则是“先进先出”(FIFO, First In First Out)数据结构。这两种...

    java-leetcode面试题解Stack之第232题用栈实现队列-题解.zip

    本题解聚焦于LeetCode中的第232题——"用栈实现队列",这是一个常见的数据结构问题,尤其在面试中常常被问到,因为它考察了对栈(Stack)和队列(Queue)基本概念的理解以及如何创造性地运用它们。 首先,我们来...

    华科java实验-用泛型栈实现泛型队列

    试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...

    java 队列 链表 栈

    本篇文章将详细讲解Java中的队列、链表和栈,这些概念是许多初学者和专业人士都需要掌握的基础知识。 首先,我们来谈谈队列。队列是一种先进先出(First In First Out,简称FIFO)的数据结构,类似于现实生活中的...

    advanced-java-master.zip

    - 常见数据结构:数组、链表、栈、队列、树、图等。 - 常见算法:排序(冒泡、选择、插入、快速等)、查找、递归、动态规划等。 9. **分布式** - 分布式ID生成:如Snowflake算法。 - 分布式缓存:Redis的使用和...

    2009年考研计算机学科专业基础综合考研复习指南“样稿”-栈和队列

    在编程语言中,很多都内置了栈和队列的抽象数据类型,如C++的std::stack和std::queue,Java的java.util.Stack和java.util.Queue,Python的collections.deque等,方便开发者快速构建算法和数据处理逻辑。 在准备2009...

    Java-master.zip

    4. **数据结构**:数据结构包括数组、链表、栈、队列、哈希表、图等。它们决定了数据如何在内存中存储和访问,影响着算法的效率。例如,栈用于回溯和深度优先搜索,队列用于广度优先搜索。Java提供了`java.util`包中...

    java-leetcode面试题解Stack之第225题用队列实现栈-题解.zip

    总的来说,Java LeetCode面试题解Stack之第225题用队列实现栈,不仅是一个有趣的技术挑战,也是求职面试中的热门题目。通过深入理解并实践该题目的解法,开发者能够增强对数据结构的理解,提高自身在面试中的竞争力...

    java 栈的实现和应用

    Java栈是一种基于后进先出(LIFO)原则的数据结构,它在计算机科学和编程中具有广泛的应用。本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据...

    数据结构第六次课-栈和队列B.ppt

    在Java编程中,可以直接使用内置函数`Integer.toOctalString()`来实现这个转换,或者自定义一个方法,如`toOctal()`,通过栈来完成。 此外,栈在解决括号匹配问题上也有显著效果。在检查一段字符串中的括号是否匹配...

    Java实现栈和队列面试题

    栈和队列是数据结构中的基础概念,它们在编程中有着广泛的应用,特别是在Java面试中常常被用来测试候选人的算法和数据结构理解能力。下面我们将详细探讨这些知识点。 1. **栈的创建**: 栈是一种后进先出(LIFO)...

    数据结构-线性表、栈、队列

    线性表、栈和队列是数据结构中最基础且广泛使用的三种结构,它们在各种应用程序中都有重要应用。下面将详细讨论这些概念以及JWArray和JWList库在实现这些数据结构时的细节。 首先,线性表是一种基本的数据结构,由n...

    用java通过接口实现栈和队列

    使用java实现栈和队列,通过接口实现多态

Global site tag (gtag.js) - Google Analytics