手搓java中常见集合的练习(二)——MyStack,MyQueue 文章目录MyArrayStackMyLinkedStackMyArrayQueueMyLinkedQueueMyArrayStack顺序栈(未实现自动扩容可补充)public class MyArrayStackT{ private Object[] data; private int top; private int size; private int capacity; { capacity10; datanew Object[capacity]; top-1; size0; } public T pop(){ if(this.isEmpty()){ return null; } Object itemdata[top--]; size--; return (T) item; } public boolean push(T t){ if(this.isFull()){ return false; } data[top]t; size; return true; } public boolean isEmpty(){ return size0; } public boolean isFull(){ return sizecapacity; } }MyLinkedStack链式栈(用next指针维护节点之间的联系)public class MyLinkedStackT { private static class NodeT{ private T item; private NodeT next; Node(T item,NodeT next){ this.itemitem; this.nextnext; } } private NodeT top; private int size; private int capacity; { capacity10; topnull; size0; } public T pop(){ if(this.isEmpty()){ return null; } size--; T itemtop.item; toptop.next; return item; } public boolean push(T t){ if(this.isFull()){ return false; } NodeT newNodenew Node(t,top); topnewNode; size; return true; } public boolean isEmpty(){ return size0; } public boolean isFull(){ return sizecapacity; } }MyArrayQueue循环队列(first和last向同一个方向变化)public class MyArrayQueueT { private Object[] data; private int first; private int last; private int size; private int capacity; { last0; first0; size0; capacity10; datanew Object[10]; } public boolean enQueue(T t){ if(isFull()){ return false; } data[last]t; last(last1)%capacity; size; return true; } public T deQueue(){ if(isEmpty()){ return null; } Object tempdata[first]; first(first1)%capacity; size--; return (T)temp; } public boolean isFull(){ return sizecapacity; } public boolean isEmpty(){ return size0; } }MyLinkedQueue链式队列public class MyLinkedQueueT { private static class NodeT{ private NodeT next; private T item; Node(T item,NodeT next){ this.itemitem; this.nextnext; } } private NodeT first; private NodeT last; private int size; { firstnull; lastnull; size0; } public void enQueue(T t){ NodeT newNodenew Node(t,null); //如果队列为空 if(lastnull){ firstnewNode; lastnewNode; } else{ //如果队列不为空 last.nextnewNode; lastnewNode; } size; } public T deQueue(){ //如果队列为空 if(firstnull){ return null; } Object itemfirst.item; firstfirst.next; if(firstnull){ lastnull; } size--; return (T) item; } }