【Java数据结构】实现栈和队列

简介: 【Java数据结构】实现栈和队列

栈:

MyStack.java

1. public class MyStack {
2. //栈的底层我们用数组存储数据
3. int[] elements;
4. 
5. public MyStack() {
6.         elements = new int[0];
7.     }
8. //压入元素
9. public void push(int element){
10. //创建一个新数组
11. int[] newArr = new int[elements.length + 1];
12. //把原数组的值复制到新数组中
13. for (int i = 0; i < elements.length; i++) {
14.             newArr[i] = elements[i];
15.         }
16. //把添加的元素放入新数组中
17.         newArr[elements.length] = element;
18. //使用新数组替换旧数组
19.         elements = newArr;
20.     }
21. //取出栈顶元素
22. public int pop(){
23. if (elements.length ==0){
24. throw new RuntimeException("stack is Empty");
25.         }
26. //取出数组中最后一个元素
27. int element = elements[elements.length-1];
28. //创建一个新数组
29. int[] newArr = new int[elements.length-1];
30. for (int i = 0; i < elements.length-1; i++) {
31.             newArr[i] = elements[i];
32.         }
33.         elements = newArr;
34. return element;
35.     }
36. //查看栈顶元素
37. public int peek(){
38. return elements[elements.length-1];
39.     }
40. //判断栈顶是否为空
41. public boolean isEmpty(){
42. return elements.length == 0;
43.     }
44. }

Test.java

1. public class Test {
2. public static void main(String[] args) {
3. MyStack ms = new MyStack();
4.         ms.push(3);
5.         ms.push(6);
6.         ms.push(4);
7.         ms.push(45);
8.         System.out.println("栈顶元素是"+ms.peek());
9.         ms.pop();
10.         System.out.println("栈顶元素是"+ms.peek());
11.         System.out.println(ms.isEmpty());
12.     }
13. 
14. }

测试结果:

队列:

MyQueue.java

1. public class MyQueue {
2. int[] elements;
3. public MyQueue() {
4.         elements = new int[0];
5.     }
6. public void add(int element){
7. int[] newArr = new int[elements.length+1];
8. for (int i = 0; i < elements.length; i++) {
9.             newArr[i] = elements[i];
10.         }
11.         newArr[elements.length] = element;
12.         elements = newArr;
13.     }
14. public int poll(){
15. if (elements.length == 0){
16. throw new RuntimeException("queue is Empty");
17.         }
18. int element = elements[0];
19. int[] newArr = new int[elements.length - 1];
20. for (int i = 0; i < elements.length - 1; i++) {
21.             newArr[i] = elements[i+1];
22.         }
23.         elements = newArr;
24. return element;
25.     }
26. public boolean isEmpty(){
27. return elements.length == 0;
28.     }
29. 
30. }

Test.java

1. public class Test {
2. public static void main(String[] args) {
3. MyQueue mq = new MyQueue();
4.         mq.add(1);
5.         mq.add(4);
6.         mq.add(5);
7.         mq.add(45);
8.         System.out.println(mq.poll());
9.         System.out.println(mq.poll());
10.         System.out.println(mq.poll());
11.         System.out.println(mq.poll());
12.         System.out.println(mq.isEmpty());
13. 
14.     }
15. 
16. 
17. }

测试结果:

 

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
160 9
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
30 1
|
16天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
44 5
|
19天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
42 5
|
1月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
1月前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
1月前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
51 4
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
26天前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
42 0
|
3月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现