Java数据结构与算法之栈(动力节点Java学院整理)
stack,中文翻译为堆栈,其实指的是栈,heap,堆。这里讲的是数据结构的栈,不是内存分配里面的堆和栈。
栈是先进后出的数据的结构,好比你碟子一个一个堆起来,最后放的那个是堆在最上面的。
队列就是排队买苹果,先去的那个可以先买。
栈
publicclassStack{
privateintarray[];
privateintmax;
privateinttop;
publicStack(intmax){
this.max=max;
array=newint[max];
top=0;
}
publicvoidpush(intvalue){
if(isFull()){
System.out.println("full,cannotinsert");
return;
}
array[top++]=value;
}
publicintpop(){
returnarray[--top];
}
publicbooleanisEmpty(){
if(top==0){
returntrue;
}
returnfalse;
}
publicbooleanisFull(){
if(top==max){
returntrue;
}
returnfalse;
}
publicvoiddisplay(){
while(!isEmpty()){
System.out.println(pop());
}
}
publicstaticvoidmain(String[]args){
Stacks=newStack(5);
s.push(1);
s.push(3);
s.push(5);
s.push(5);
s.push(5);
s.display();
}
}
其实还是觉得设置top为-1好计算一点,记住这里的i++和++i,如果i=1,那么array[i++]=2,指的是array[1]=2,下次用到i的时候i的值才会变2,而++i就是直接使用i=2。
top指向0,因为每次都push一个元素加一,那么添加到最后一个元素的时候top=max。由于先进后出,那么先出的是最后进的,刚刚为top-1所在的位置。
正确输出:
5
5
5
3
1
一、栈的使用——单词逆序。
publicStringreverse(Stringin){
Stringout="";
for(inti=0;i
将Stack的数组类型改为char即可。
读取输入也可以用IO读取。
publicstaticvoidmain(String[]args){
InputStreamReaderis=newInputStreamReader(System.in);
BufferedReaderb=newBufferedReader(is);
Stringstring="";
try{
string=b.readLine();
}catch(IOExceptione){
e.printStackTrace();
}
Stackst=newStack(string.length());
System.out.println(st.reverse(string));
}
二、栈的使用——分隔符匹配。
publicintcharat(charc){
for(inti=0;i
将({[先压入栈,一旦遇到)}]便与弹出的元素比较,若吻合,则匹配。如果一直没有)}],最后便会弹出栈的左符号,提示是在具体哪个位置,缺少的具体的右符号类型。
这是可以用栈来实现的工具。
栈中数据入栈和出栈的时间复杂度为常数O(1),因为与数据个数无关,直接压入弹出,操作时间短,优势便在这里,如果现实生活的使用只需用到先进后出的顺序而且只用到进出数据的比较,那就可以使用栈了。
以上所述是小编给大家介绍的Java数据结构与算法之栈(动力节点Java学院整理),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!