Java数据结构与算法之stack栈
来源:互联网 发布:怎么往云镜上下载软件 编辑:程序博客网 时间:2024/06/06 00:10
目录:
1.栈概述
2.数组实现自定义栈
3.链表实现自定义栈
4.集合实现自定义栈
1.栈概述
栈和队列一样,也是线性表的一种,它唯一的特点是需要满足先进后出(FILO)的规则,也就是只能对栈的一头进行操作,添加数据
称为压栈,移除数据称为弹栈。而在java中栈的实现可以通过数组,链表,集合(ArrayList/LinkedList)3种方式进行实现。
2.数组实现自定义栈
(1)自定义栈接口CustomStack.java
(2)数组自定义栈类CustomArrayStack.java
(3)测试类CustomArrayStackTest.java
(4)测试控制台输出
3.链表实现自定义栈
(1)自定义栈接口CustomStack.java(与2一致)
(2)链表自定义栈类CustomLinkedStack.java
(3)测试类CustomLinkedStackTest.java
(4)测试结果与2一致
4.集合实现自定义栈
(1)自定义栈接口CustomStack.java(与2一致)
(2)集合类LinkedList实现栈自定义CustomCollectionStack.java
(3)测试类CustomCollectionStackTest.java
1.栈概述
2.数组实现自定义栈
3.链表实现自定义栈
4.集合实现自定义栈
1.栈概述
栈和队列一样,也是线性表的一种,它唯一的特点是需要满足先进后出(FILO)的规则,也就是只能对栈的一头进行操作,添加数据
称为压栈,移除数据称为弹栈。而在java中栈的实现可以通过数组,链表,集合(ArrayList/LinkedList)3种方式进行实现。
2.数组实现自定义栈
(1)自定义栈接口CustomStack.java
package com.datastructure.test;public interface CustomStack<T> {//压栈方法public void push(T data)throws Exception;//弹栈/移除顶部元素,并返回对应的数据public T pop()throws Exception;//获取stact第一个元素public T peek();//判断栈是否为空public boolean empty();//返回栈中元素的个数public int size();}
(2)数组自定义栈类CustomArrayStack.java
package com.datastructure.test;public class CustomArrayStack<T> implements CustomStack<T> {static final int defaultSize = 15;//指示顶部元素的位置private int size;private T[] arrays;/* * 无参构造方法,做一些初始化的操作 */@SuppressWarnings("unchecked")public CustomArrayStack() {size = 0;arrays = (T[]) new Object[defaultSize];}/* * 根据用户自定义数组大小初始化数组 */@SuppressWarnings("unchecked")public CustomArrayStack(int customSize) {size = 0;arrays = (T[]) new Object[customSize];}/* * 向栈顶添加元素 */@Overridepublic void push(T data) throws Exception {if (size<arrays.length) {arrays[size] = data;size++;}else {throw new Exception("数组栈已经满啦!");}}/* * 将栈顶的元素移除 */@Overridepublic T pop() throws Exception {T topData;if (empty()) {throw new Exception("数组栈为空!");}else {topData = arrays[size-1];size--;}return topData;}/* * 获取栈顶的元素 */@Overridepublic T peek() {return arrays[size-1];}/* * 判断栈是否为空 */@Overridepublic boolean empty() {return size==0;}/* * 返回栈的长度 */@Overridepublic int size() {return size;}}
(3)测试类CustomArrayStackTest.java
package com.datastructure.test;public class CustomArrayStackTest {public static void main(String[] args) {CustomArrayStack<String> stack = new CustomArrayStack<>(10);System.out.println("是否为空:"+stack.empty());try {stack.push("I");stack.push("am");stack.push("andy");} catch (Exception e) {e.printStackTrace();}System.out.println("栈顶元素:"+stack.size());System.out.println("栈顶元素:"+stack.peek());try {System.out.println("移除元素:"+stack.pop());} catch (Exception e) {e.printStackTrace();}System.out.println("栈顶元素:"+stack.size());System.out.println("栈顶元素:"+stack.peek());}}
(4)测试控制台输出
是否为空:true栈长度:3栈顶元素:andy移除元素:andy栈长度:2栈顶元素:am
3.链表实现自定义栈
(1)自定义栈接口CustomStack.java(与2一致)
(2)链表自定义栈类CustomLinkedStack.java
package com.datastructure.test;public class CustomLinkedStack<T> implements CustomStack<T> {private int size;private Node topNode;@Overridepublic void push(T data) throws Exception {Node newTopNode;if (empty()) { newTopNode = new Node(data, null);}else { newTopNode = new Node(data, topNode);}topNode = newTopNode;size++;}@Overridepublic T pop() throws Exception {Node oldTopNode = topNode;topNode = topNode.nextNode;size--;return oldTopNode.data;}@Overridepublic T peek() {return topNode.data;}@Overridepublic boolean empty() {return size==0;}@Overridepublic int size() {return size;}/** * 节点内部类 */class Node{private T data;private Node nextNode;public Node(T data,Node nextNode){this.data = data;this.nextNode = nextNode;}}}
(3)测试类CustomLinkedStackTest.java
package com.datastructure.test;public class CustomLinkedStackTest {public static void main(String[] args) {CustomLinkedStack<String> stack = new CustomLinkedStack<>();System.out.println("是否为空:"+stack.empty());try {stack.push("I");stack.push("am");stack.push("andy");} catch (Exception e) {e.printStackTrace();}System.out.println("栈长度:"+stack.size());System.out.println("栈顶元素:"+stack.peek());try {System.out.println("移除元素:"+stack.pop());} catch (Exception e) {e.printStackTrace();}System.out.println("栈长度:"+stack.size());System.out.println("栈顶元素:"+stack.peek());}}
(4)测试结果与2一致
4.集合实现自定义栈
(1)自定义栈接口CustomStack.java(与2一致)
(2)集合类LinkedList实现栈自定义CustomCollectionStack.java
package com.datastructure.test;import java.util.LinkedList;class CustomCollectionStack<T> implements CustomStack<T> {private LinkedList<T> linkedList = new LinkedList<>();public CustomCollectionStack() {}@Overridepublic void push(T data) throws Exception {linkedList.add(data);}@Overridepublic T pop() throws Exception {return linkedList.removeLast();}@Overridepublic T peek() {return linkedList.getLast();}@Overridepublic boolean empty() {return linkedList.isEmpty();}@Overridepublic int size() {return linkedList.size();}}
(3)测试类CustomCollectionStackTest.java
package com.datastructure.test;public class CustomCollectionStackTest {public static void main(String[] args) {CustomCollectionStack<String> stack = new CustomCollectionStack<>();System.out.println("是否为空:"+stack.empty());try {stack.push("I");stack.push("am");stack.push("andy");} catch (Exception e) {e.printStackTrace();}System.out.println("栈长度:"+stack.size());System.out.println("栈顶元素:"+stack.peek());try {System.out.println("移除元素:"+stack.pop());} catch (Exception e) {e.printStackTrace();}System.out.println("栈长度:"+stack.size());System.out.println("栈顶元素:"+stack.peek());}}
(4)结果与2一致
文章:
Java数据结构与算法之学习路线
Java数据结构与算法之Array数组
Java数据结构与算法之LinkedList单链表
Java数据结构与算法之Queue队列
Java数据结构与算法之stack栈
0 0
- Java数据结构与算法之stack栈
- java数据结构与算法之栈(Stack)设计与实现
- java数据结构与算法之栈(Stack)设计与实现
- 数据结构与算法---栈(stack)
- Java 数据结构之 Stack(栈)
- C源码@数据结构与算法->栈Stack
- 数据结构与算法练习-Stack栈
- [Java数据结构]线性表之栈Stack
- Java数据结构与算法之栈
- 数据结构与算法3: 栈的算法应用(Stack applications)
- 数据结构之栈stack
- java数据结构之堆栈Stack
- 数据结构与算法学习(三)栈结构Stack
- 数据结构与算法分析 P86 Stack 栈的实现
- JS中的算法与数据结构——栈(Stack)
- 数据结构与算法之栈(Java与Python实现)
- 算法与数据结构实验题 3.1 stack
- java实现数据结构——栈Stack与队列Queue
- effective stl 第44条:容器的成员函数优先于同名的算法
- js中的表单插件
- 苹果CEO库克访谈:看好AR,乔布斯改变他一生
- 生产者和消费者问题
- 国庆随笔
- Java数据结构与算法之stack栈
- W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease: 由于没有公钥,无法验证下
- heapify的总结
- Thread和Runnable实现多线程的区别
- NOIP提高组【JZOJ4814】tree
- java 剪切板 clipboard.js 与 ZeroClipboard.swf
- HDU 4185 Oil Skimming 【离散化二分匹配 黑白染色】
- 新版caffe添加自己的层(目前只学会添加,我想要添加的loss还没能实现)
- JZOJ 4812 【NOIP2016提高A组五校联考2】string