栈实现代码:
/** * 自定义栈 * @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
相关推荐
Java 数组实现栈、队列和线性列表 Java 是一种广泛使用的编程语言,数组是 Java 中的一种基本数据结构。数组可以用来实现栈、队列和线性列表等数据结构。下面是使用 Java 数组实现栈、队列和线性列表的详细介绍。 ...
栈和队列的基本操作及其应用 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队...
在C++或Java等编程语言中,我们可以使用数组或链表来实现栈。源码可能包含实现基本栈操作的函数,如push(入栈)、pop(出栈)和peek(查看栈顶元素)。 队列(Queue)则是先进先出(FIFO,First In First Out)的...
本章节介绍了表、栈和队列三种重要的数据结构及其在Java中的实现方式。表作为一种灵活的线性数据结构,既可以基于数组也可以基于链表实现;栈和队列则是具有特定操作规则的特殊表。这些数据结构在算法设计和软件开发...
[Java]算法练习-队列和栈
在Java编程语言中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们在处理数据存储和操作方面有着广泛的应用。本教程将通过一些小例子来深入理解这两种数据结构及其在Java中的实现。 栈是一种后进先出(LIFO...
在计算机科学中,栈和队列是两种基本的数据结构,它们在编程中有着广泛的应用。栈被称为“后进先出”(LIFO, Last In First Out)数据结构,而队列则是“先进先出”(FIFO, First In First Out)数据结构。这两种...
本题解聚焦于LeetCode中的第232题——"用栈实现队列",这是一个常见的数据结构问题,尤其在面试中常常被问到,因为它考察了对栈(Stack)和队列(Queue)基本概念的理解以及如何创造性地运用它们。 首先,我们来...
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
本篇文章将详细讲解Java中的队列、链表和栈,这些概念是许多初学者和专业人士都需要掌握的基础知识。 首先,我们来谈谈队列。队列是一种先进先出(First In First Out,简称FIFO)的数据结构,类似于现实生活中的...
- 常见数据结构:数组、链表、栈、队列、树、图等。 - 常见算法:排序(冒泡、选择、插入、快速等)、查找、递归、动态规划等。 9. **分布式** - 分布式ID生成:如Snowflake算法。 - 分布式缓存:Redis的使用和...
在编程语言中,很多都内置了栈和队列的抽象数据类型,如C++的std::stack和std::queue,Java的java.util.Stack和java.util.Queue,Python的collections.deque等,方便开发者快速构建算法和数据处理逻辑。 在准备2009...
4. **数据结构**:数据结构包括数组、链表、栈、队列、哈希表、图等。它们决定了数据如何在内存中存储和访问,影响着算法的效率。例如,栈用于回溯和深度优先搜索,队列用于广度优先搜索。Java提供了`java.util`包中...
总的来说,Java LeetCode面试题解Stack之第225题用队列实现栈,不仅是一个有趣的技术挑战,也是求职面试中的热门题目。通过深入理解并实践该题目的解法,开发者能够增强对数据结构的理解,提高自身在面试中的竞争力...
Java栈是一种基于后进先出(LIFO)原则的数据结构,它在计算机科学和编程中具有广泛的应用。本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据...
在Java编程中,可以直接使用内置函数`Integer.toOctalString()`来实现这个转换,或者自定义一个方法,如`toOctal()`,通过栈来完成。 此外,栈在解决括号匹配问题上也有显著效果。在检查一段字符串中的括号是否匹配...
栈和队列是数据结构中的基础概念,它们在编程中有着广泛的应用,特别是在Java面试中常常被用来测试候选人的算法和数据结构理解能力。下面我们将详细探讨这些知识点。 1. **栈的创建**: 栈是一种后进先出(LIFO)...
线性表、栈和队列是数据结构中最基础且广泛使用的三种结构,它们在各种应用程序中都有重要应用。下面将详细讨论这些概念以及JWArray和JWList库在实现这些数据结构时的细节。 首先,线性表是一种基本的数据结构,由n...
使用java实现栈和队列,通过接口实现多态