栈以及JAVA实现
Posted Redo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈以及JAVA实现相关的知识,希望对你有一定的参考价值。
栈
后进先出
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
API
public class StackOfString//储存字符串的栈
StackOfString()//创建对象
void push(String item)//入栈
String pop()//出栈
boolean isEmpty()//判断栈是否为空
int size()//栈中对象数目
示例
- 空栈什么也没有
- push(‘a‘)
graph BT
1(a,栈底,栈顶)
- push(‘b‘)
graph TD
2(b,栈顶)==>1(a,栈底)
- push(‘c‘)
graph TD
2(b)==>1(a,栈底)
3(c,栈顶)==>2
- pop()
graph TD
2(b,栈顶)==>1(a,栈底)
链表栈
令栈顶指向栈底方向,保存指向栈顶元素的引用,可以提高入栈出栈的效率
Code by java
public class StackOfString {
private class Node{//内部类
String item;//存储的String对象
Node next;//指向下一个Node的引用
}
private Node first=null;//初始栈顶对象为空
public boolean isEmpty(){//判断栈是否为空,只要看first是否等于null
return first==null;
}
public void push(String item){//添加元素
Node oldfist=first;//拷贝first
first=new Node();//令first指向新的Node
first.item=item;//新Node存储的字符串为传入的参数
first.next=oldfist;//令新的Node的next等于旧的first,也就是说令新的栈顶元素指向旧的栈顶元素
}
public String pop(){//删除元素
String item=first.item;//拷贝栈顶元素存储的字符串
first=first.next;//令栈顶元素指向它的下一个元素
return item;
}
}
数组栈
数组栈使用一个数组当作栈,好处是节省了空间,缺点是长度固定,有多余空间,而且有下标越界的风险,
public class FixedCapacityStackOfString {
private String[] s;
private int N=0;//N表示栈顶元素的下一个元素的下标
public FixedCapacityStackOfString(int capacity){//根据传入的capacity确定字符串数组的长度
s=new String[capacity];
}
public boolean isEmpty(){
return N==0;//如果N等于0,即栈顶元素的下一个元素为0,则栈为空
}
public void push(String item){//入栈
s[N++]=item;//注意!!这里的意思是,先给数组s的N下标位置赋值,然后N=N+1
}
public String pop(){
String item=s[--N];//注意!!这里的意思是,先N=N-1,然后给数组s的N下标位置的字符串拷贝下来
s[N]=null;//令栈顶元素的下一个元素为null,即使得垃圾回收器可以回收这部分空间
return item;//返回拷贝的字符串
}
}
以上是关于栈以及JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章
数据结构 Java数据结构 栈和队列 以及LeetCode相关面试题
二叉树的三种遍历非递归实现(栈) 以及层序遍历(队列)(java)
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情