【Java数据结构】栈与队列

【Java数据结构】栈与队列

一、栈的存储结构及实现

1、栈的Java接口定义

public interface StackInterface<T>{
    public void push(T element);	//入栈,在栈顶插入指定数据元素
    public T pop();				//出栈,删除并返回栈顶元素
    public T getTop();			//读取当前栈顶元素
    public boolean isEmpty();	//判断栈是否为空
}

2、栈的顺序存储结构及实现

①顺序栈的概念

​ 栈的顺序存储结构称为顺序栈(sequential stack)。顺序栈被定义为实现StackInterface接口的Java类SequentialStack,类中的成员变量将实现顺序栈存储,成员函数将实现栈接口函数。

public class SequentialStack<T> implements StackInterface<T>{
    //成员变量实现顺序栈存储结构
    //成员函数实现栈接口函数
}

image-20211118154022060

②顺序栈的实现

public class SequentialStack<T> implements StackInterface<T>{
    protected T[] stack;
    private final static int STACK_SIZE=100;
    protected int top;
    //成员函数实现接口函数
}

③顺序栈的初始化

public SequentialStack(){
    stack = (T[]) (new Object[STACK_SIZE]);
    top = -1;
}

④入栈出栈操作(push&pop)

public void push(T element){
    if(top==STACK_SIZE-1)
        throw new StackException("栈满");
    stack[++top]=element;
}

public T pop(){
    if(isEmpty())
        throw new StackException("栈空");
    T result = stack[top--];
    return result;
}

⑤取栈顶元素(getTop)

public T getTop){
    if(isEmpty())
        throw new StackException("栈空");
    return stack[top];
}

⑥判断栈空(isEmpty)

public boolean isEmpty(){
    if(top==-1)
        return true;
    return false;
}

3、java.util下的Stack工具类

image-20211118154921235

image-20211118154929754

二、Java中的Queue队列

1、Queue接口

  • 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

image-20211118155640494

  • LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

image-20211118155753148

image-20211118155803695

2、案例

import java.util.LinkedList;
import java.util.Queue;
 
public class Main {
    public static void main(String[] args) {
        //add()和remove()方法在失败的时候会抛出异常(不推荐)
        Queue<String> queue = new LinkedList<String>();
        //添加元素
        queue.offer("a");
        queue.offer("b");
        queue.offer("c");
        queue.offer("d");
        queue.offer("e");
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("element="+queue.element()); //返回第一个元素 
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("peek="+queue.peek()); //返回第一个元素 
        for(String q : queue){
            System.out.println(q);
        }
    }
}
posted @ 2021-11-18 16:00  DarkerG  阅读(67)  评论(0)    收藏  举报