【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>{
//成员变量实现顺序栈存储结构
//成员函数实现栈接口函数
}

②顺序栈的实现
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工具类


二、Java中的Queue队列
1、Queue接口
- 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

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


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);
}
}
}

浙公网安备 33010602011771号