标签:下标越界 添加 lock sem capacity 线性表 n+1 aci str
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
public class StackOfString//储存字符串的栈
StackOfString()//创建对象
void push(String item)//入栈
String pop()//出栈
boolean isEmpty()//判断栈是否为空
int size()//栈中对象数目
令栈顶指向栈底方向,保存指向栈顶元素的引用,可以提高入栈出栈的效率
public class StackOfString {
private class Node{//内部类
String item;//存储的String对象
Node next;//指向下一个Node的引用
}
private Node first=null;//初始栈顶对象为空
public boolean isEmpty(){//判断栈是否为空,只要看first是否等于null
return first==null;
}
public void push(String item){//添加元素
Node oldfist=first;//拷贝first
first=new Node();//令first指向新的Node
first.item=item;//新Node存储的字符串为传入的参数
first.next=oldfist;//令新的Node的next等于旧的first,也就是说令新的栈顶元素指向旧的栈顶元素
}
public String pop(){//删除元素
String item=first.item;//拷贝栈顶元素存储的字符串
first=first.next;//令栈顶元素指向它的下一个元素
return item;
}
}
数组栈使用一个数组当作栈,好处是节省了空间,缺点是长度固定,有多余空间,而且有下标越界的风险,
public class FixedCapacityStackOfString {
private String[] s;
private int N=0;//N表示栈顶元素的下一个元素的下标
public FixedCapacityStackOfString(int capacity){//根据传入的capacity确定字符串数组的长度
s=new String[capacity];
}
public boolean isEmpty(){
return N==0;//如果N等于0,即栈顶元素的下一个元素为0,则栈为空
}
public void push(String item){//入栈
s[N++]=item;//注意!!这里的意思是,先给数组s的N下标位置赋值,然后N=N+1
}
public String pop(){
String item=s[--N];//注意!!这里的意思是,先N=N-1,然后给数组s的N下标位置的字符串拷贝下来
s[N]=null;//令栈顶元素的下一个元素为null,即使得垃圾回收器可以回收这部分空间
return item;//返回拷贝的字符串
}
}
标签:下标越界 添加 lock sem capacity 线性表 n+1 aci str
原文地址:https://www.cnblogs.com/redo19990701/p/10704208.html