提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
什么是队列
队列我的理解就是排队,先到先出,只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表
入队列:进行插入操作的一端称为队尾
出队列:进行删除操作的一端称为队头
简单实现队列
package Queue;
class Node{
int val;
Node next=null;
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return " " + val ;
}
}
public class MyQueue {
private Node head = null;
private Node tail = null;
private int size=0;
public void print(){
Node node = head;
while(node!=null){
System.out.print(node);
node = node.next;
}
System.out.println();
}
//入队列(尾插)
public void offer(int val){
Node node =new Node(val);
if(size ==0){
head = node;
tail = node;
size++;
return;
}
tail.next = node;
tail = node;
size++;
}
//出队列(头删)
public Integer poll(){
if(size == 0){
return null;
}
int ret = head.val;
head = head.next;
if(head == null){
tail = null;
}
size--;
return ret;
}
//返回队首元素
public Integer peek(){
if(size == 0){
return null;
}
return head.val;
}
}
什么是栈
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底;
压栈:栈的插入操作叫做进栈,入数据在栈顶
出栈:栈的删除操作叫做出栈,出数据在栈顶
简单的实现一个栈
package Stack;
//因为Stack 继承于顺序表,这里就使用顺序表来进行实现
public class MyStack {
private int[] array = new int[100];
private int size = 0;
private int capacity=100;
@Override
public String toString() {
StringBuffer s1=new StringBuffer();
for (int i=0;i<size;i++){
s1.append(" "+array[i]);
}
return String.valueOf(s1);
}
//realloc
private void realloc(){
capacity*=2;
int[] arr=new int[capacity];
for(int i=0;i<array.length;i++){
arr[i]=array[i];
}
array=arr;
}
//入栈(尾插)
public void push(int val){
if(size==capacity){
realloc();
}
array[size] = val;
size++;
}
//出栈
public Integer pop(){
if(size == 0){
return null;
}
int ret = array[size-1];
size--;
return ret;
}
//取栈顶元素
public Integer peek(){
if(size == 0){
return null;
}
return array[size-1];
}
}
在标准库中栈和队列的区别
Stack是一个类,拿来可以直接使用
Queue是一个接口,不能直接实例化,需要创建对应的子类
Stack<Integer> stack = new Stack<>();
Queue<Integer> queue = new LinkedList<>();