Java—栈和队列最基本操作:
插入数据(入栈)、删除数据(出栈)、查看栈顶元素、返回栈内元素个数;将元素推入队尾(尾插)、删除队头元素(头删)、查看队头、队尾元素
栈基本操作:
import java.util.Arrays;
public class Stack {
private int[] array;
private int top;//指向当前栈顶元素的下标
public Stack(int defaultCapacity){
array = new int[defaultCapacity];
top = 0;
}
//插入数据
private void push(int val){
if(top == array.length){
//Arrays.copyOf(要复制的数组,复制后的新数组长度)
array = Arrays.copyOf(array,array.length * 2);
}
array[top] = val;
top ++;
}
//删除数据
private void pop(){
if(top <= 0){
System.out.println("队列为空,不能删除");
return;
}
top--;
array[top] = 0;//可加可不加,将所有空位置保持为0
}
//查看栈顶元素
private int top(){
if(top <= 0){
System.out.println("栈为空,无法返回栈顶元素");
return -1;
}
return array[top - 1];
}
//返回栈内元素个数
private int size(){
return top;
}
//判断栈是否为空
private boolean isEmpty(){
return top == 0;
}
}
队列基本操作:
class Node {
int val;
public Node next;
public Node(int val,Node next){
this.val = val;
this.next = next;
}
Node(int val){
this(val,null);
}
}
public class Queue {
private Node front = null;//链表的第一个结点
private Node rear = null;//链表的最后一个结点
private int size = 0;
//将元素推入队尾
//尾插
private void push(int val){
//先创建结点
Node node = new Node(val);
if(front == null){
front = node;
}else {
rear.next = node;
}
rear = node;
size++;
}
//删除队头元素
//头删
private void pop(){
if(size <= 0) {
System.out.println("队列为空,无法删除");
return;
}
front = front.next;
if(front== null){
rear = null;
}
size--;
}
//查看对头元素
private int front(){
if(size <= 0){
System.out.println("队列为空,无法删除");
return -1;
}
return front.val;
}
//查看队尾元素
private int rear(){
if(size <= 0){
System.out.println("队列为空,无法删除");
return -1;
}
return rear.val;
}
private int size() {
return size;
}
private boolean isEmpty(){
return size == 0;
}
}