栈和队列是一个比较抽象的概念,大多数人知道栈和队列的特点,但是实际不知道怎么用,这是大家学习阶段的通病。
要想用栈和队列,首先要明确,他们是什么。
1.是什么?
栈和队列其实是一个工具,他们传统的工具方法 工具类不同,他们是“思想”工具,大家都知道,栈是后进先出,队列是先进先出。但是实际怎么用却不知道。
2.怎么用?
栈和队列是很好的工具,他们的应用我们平时开发可能用到得少,但是在实际中,他们的应用非常多。
栈:栈先进先出的特点,可以很好的控制访问控制,栈的数据访问是有很严格的,只能访问最后加入的数据,这对数据访问控制严格的应用很有好处。现实中,字符串倒序输出,使用栈的原理就可以很好的实现。示例代码:
public String goReverse(String inputStr){
int size = inputStr.length();
StackS stackS = new StackS(size);
int i = 0;
while(!stackS.isFull()){
stackS.push(inputStr.charAt(i));
i++;
}
StringBuffer stringBuffer = new StringBuffer();
while(!stackS.isEmpty()){
stringBuffer.append(stackS.pop());
}
outputStr = stringBuffer.toString();
return outputStr;
}
除此之外,我们熟悉的编译器变异机制中也有栈的原理,例如特殊标点符号匹配,例如“{”、“}”、“(”、“)”等成对的符号。
队列:队列可以模拟很多现实的生产环境,例如排队,队列是先进先出,不允许有任何元素插队,这对于解决现实生产问题有很大帮助。
优点:栈和队列的操作的时间复杂度都是O(1),效率非常高。