今天给大家介绍一下栈的基本概念及实现!话不多说,立即开始!
1.栈的概念:
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/入栈/压栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈,出数据在栈顶。
过程:
2.关于栈的几个使用方法:
2.1:方法的使用:
public class Trst {public static void main(String[] args) {Stack<Integer> s = new Stack<>();s.push(1);s.push(2);s.push(3);s.push(4);System.out.println(s.size()); //获取栈的元素个数System.out.println(s.peek()); //获取栈顶元素4s.pop(); //将4出栈(移除栈顶元素)System.out.println(s.pop());//继续出栈,栈顶元素3被移除if(s.empty()){System.out.println("栈空");}else{System.out.println(s.size());}}
}
3.栈的模拟实现:
基本结构:
1.用于存储数据的数组
2.数组中的有效元素个数
构造方法:自定义一个数组大小。
具体代码:
public class Mystack {public int[] elem; //存储整形元素public int usedSize; //有效元素个数
3.2:基本方法的实现:
具体方法: 压栈、出栈、获取栈顶的元素
(1) 压栈方法的实现
判断当前栈是否已满,如果已满,扩容到原来的两倍:
public Mystack(){this.elem = new int[10]; //创建容纳10整形的数组
}
同时,在尾部添加新元素同时 usedSize++
具体代码如下:
public void push(int val){if(isFull()) //判断栈空间是否已经满,满的话,扩容{this.elem = Arrays.copyOf(elem,2*elem.length); //二倍扩容}elem[usedSize++] = val; //尾部添加元素}public boolean isFull(){return usedSize == elem.length; //数组容量是否已满}
(2) 出栈方法的实现:
判断当前栈是否为空栈,如果为空,抛出异常。
获取栈顶元素(数组末尾元素)并将其赋给整形val,usedSize--,同时返回val.
public int pop(){ //移除栈顶元素if(isEmpty()){ //空栈throw new EmptyStackException();}int val = elem[usedSize-1]; //栈顶元素优先去除usedSize--;return val;}
(3)获取栈顶元素方法的实现
判断栈是否为空,为空,抛出异常,最后返回数组的最后一个元素。
具体代码如下:
//获取栈顶元素public int peek(){if(isEmpty()){throw new EmptyStackException();}return elem[usedSize-1]; //返回末尾元素}public boolean isEmpty(){return usedSize == 0;}
今天的分享就到这里,求三连!!!