前言
本章节主要讲述了如何基于链表和数组实现栈
一、基于数组实现栈
在往栈加入元素时,首先要进行扩容判断,添加这个元素是否超出当前栈的容量,若超出则需要进行扩容。
在获取栈顶元素和去除元素时,要判断栈中是否还有元素
class stack<T>{
private Object object[];
private int top = -1;
public stack() {
object = new Object[10];
}
public boolean isEmpty(){
return top == 0;
}
public T peek(){
T t=null;
if(top > 0){
t = (T) object[top-1];
}
return t;
}
public void expandCapacity(int size){
if(size > object.length){
size = top * 3/2 +1;
object = Arrays.copyOf(object , size);
}
}
//可以利用peek去除函数,还是要判断是否为空对top操作
public T pop(){
T t = peek();
if(top > 0){
object[top-1] = null;
top = top-1;
}
return t;
}
public void push(T t){
expandCapacity(top+1);
object[top] = t;
top++;
}
}
二、基于链表实现栈
class stack1<T>{
class StackNode{
T t;
StackNode next;
}
StackNode head;
stack1(){
head = null;
}
public boolean isEmpty(){
return head == null;
}
public T peek(){
if(head == null){
return null;
}
return head.t;
}
public T pop(){
T t = peek();
if(t != null){
head =head.next;
}
return t;
}
public void push(T t){
StackNode newNode =new StackNode();
newNode.t = t;
newNode.next = head;
head=newNode;
}
}