数据结构-栈
栈的数据结构是一种后进先出的数据结构,LIFO(Last In First Out)。对栈的操作,只限于对栈顶元素的操作如出栈、入栈(也叫 压栈)等。
基于数组实现栈
由于只对栈顶元素进行操作,栈的操作是数组操作的一个集合。因此我们将之前博客(https://blog.csdn.net/weixin_43400170/article/details/103931221)中实现的动态数组复用,包装一个栈。
定义一个栈接口
将栈的基本操作定义在接口中,实现类去具体实现。
话不多说,上代码
/*
定义stack数据结构的操作
*/
public interface Stack <E>{
/*
* 压栈,将元素压入栈中
* */
void push(E e);
/*
* 出栈,将栈顶元素弹出
* */
E pop();
/*
* 获取栈顶元素,并不将元素弹出栈
* */
E peek();
/*
* 获取栈中元素个数
* */
int getSize();
/*
* 栈的非空判断
* */
boolean isEmpty();
}
/*
* 基于动态数组实现数据结构-栈
* */
public class ArrayStack<E> implements Stack<E> {
/*
* 代理一个之前的动态数组MyArray
* */
private MyArray<E> array;
public ArrayStack(int capacity){
array=new MyArray<>(capacity);
}
public ArrayStack (){
array=new MyArray<>();
}
@Override
public void push(E e) {
array.addLast(e);
}
@Override
public E pop() {
return array.removeLast() ;
}
@Override
public E peek() {
return array.getLast();
}
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
@Override
public String toString(){
StringBuilder sb=new StringBuilder();
sb.append("stack:[");
for (int i = 0; i < array.getSize(); i++) {
sb.append(array.get(i));
if(i!=array.getSize()-1){
sb.append(",");
}
}
sb.append("] top");
return sb.toString();
}
/*
* 测试
* */
public static void main(String[] args) {
ArrayStack<Integer> stack=new ArrayStack<>();
// 依次入栈操作
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println(stack);
}
// 依次出栈操作
for (int i = 0; i < 5; i++) {
stack.pop();
System.out.println(stack);
}
}
}