顺序表实现栈
public class MyStack<T> {
public T[] elem;
public int pop;
public MyStack(){
this.elem = (T[])new Object[10];
}
//是否满了
private boolean isFull(){
return this.pop == this.elem.length;
}
//入栈
public void push(T val) {
if(isFull()) {
this.elem = Arrays.copyOf(this.elem,this.elem.length*2);
}
this.elem[this.pop] = val;
this.pop++;
}
//是否为空
public boolean emply() {
return this.pop == 0;
}
//出栈
public T pop() {
if(emply()) {
throw new RuntimeException("栈空!");
}
/*T data = this.elem[pop-1];
this.pop--;
return data;*/
return this.elem[--this.pop];
}
//栈顶元素
public T peek() {
if(emply()) {
throw new RuntimeException("栈空!");
}
return this.elem[this.pop-1];
}
//长度
public int size(){
return this.pop;
}
}
链表实现队列
class Node {
public int data;
public Node next;
public Node(int data) {
this.data = data;
}
}
public class MyQueue {
public int usedSize;
public Node front;//头
public Node rear;//尾
//入队
public boolean offer(int val) {
Node node = new Node(val);
if (isEmply()) {
this.front = node;
this.rear = node;
}else {
this.rear.next = node;
this.rear = node;
}
this.usedSize++;
return true;
}
//出队
public int poll() {
if (isEmply()) {
throw new RuntimeException("队列为空!");
}
int data = this.front.data;
this.front = this.front.next;
this.usedSize = this.usedSize-1;
return data;
}
//队顶元素
public int peek() {
if (isEmply()) {
throw new RuntimeException("队列为空!");
}
return this.front.data;
}
//是否为空
public boolean isEmply() {
return this.usedSize == 0;
}
//长度
public int size() {
return this.usedSize;
}
}