栈:后进先出,先进后出
队列:先进先出,后进后出
1、栈的增删查:
import java.util.Arrays;
public class MyStack <T>{
private Object[] objs;
private int size;
public MyStack(){
objs = new Object[10];
size = 0;
}
//添加(入栈)
public void add(Object obj){
if(size==objs.length){
int newCap = objs.length+objs.length>>1;
objs = Arrays.copyOf(objs,newCap);
}
objs[size++] = obj;
}
//删除(出栈)
public T pop(){
if(size==0)
return null;
return (T)objs[--size];
}
//查大小
public int show(){
return size;
}
}
测试执行:
public class Test {
public static void main(String args[]) {
MyStack<String> s = new MyStack<String>();
s.add("m");
s.add("n");
s.add("x");
System.out.println(s.pop());
System.out.println(s.pop());
s.add("y");
System.out.println(s.pop());
s.add("z");
}
}
2、队列的增删查:
package com.fyb.oop.week3.duilie;
import java.util.Arrays;
public class MyQueue<T> {
private Object[] objs;
private int size;
public MyQueue(){
objs = new Object[10];
size = 0;
}
//添加
/*public void push(Object obj){//push:压栈
if(size==objs.length){
int newCap = objs.length+objs.length>>1;
objs = Arrays.copyOf(objs,newCap);
}
objs[size++] = obj;
}*/
//优先级队列,插入
public void push(Object obj){//push:压栈
if(size==objs.length){
int newCap = objs.length+objs.length>>1;
objs = Arrays.copyOf(objs,newCap);
}
int target = 0;
for (int i=0;i<objs.length;i++){
if ((Integer)objs[i]>(Integer)obj&&(Integer)objs[i+1]<(Integer)obj){
target = i+1;
}
}
for (int k=size;k>=target;k--){
objs[k] = objs[k-1];
}
objs[target] = obj;
size++;
}
//删除
public T pop(){
if(size==0)
return null;
T t = (T)objs[0];
for(int i=0;i<objs.length-1;i++){
objs[i]=objs[i+1];
}
size--;
return t;
}
//查大小
public int show(){
return size;
}
//查队头元素
public T peek(){
if(size==0)
return null;
T t = (T)objs[0];
return t;
}
}