栈的基本操作
- Push------------在顶部插入一个元素
- Pop-------------返回并移除栈顶元素 如果栈为空,抛出异常
- isEmpty--------如果栈为空,则返回true
- Top--------------返回顶部元素,但并不移除它
- peek------------查找栈顶元素,成功返回该元素 如果栈为空,抛出异常
- search--------- 返回该元素距离栈顶的距离,该元素在栈顶返回1 如果不存在该元素,返回-1
常见面试题括号匹配
@Test
void test2() {
String str = "({)([])[]}";
Stack<Character> stack = new Stack();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch=='('||ch=='['||ch=='{'){
stack.push(ch);
continue;
}
if (stack.isEmpty()){
System.out.println("ERROR");
return;
}
if (ch==']'&&stack.peek()=='['){
stack.pop();
continue;
}
if (ch==')'&&stack.peek()=='('){
stack.pop();
continue;
}
if (ch=='}'&&stack.peek()=='{'){
stack.pop();
continue;
}
}
if (stack.isEmpty()){
System.out.println("匹配成功");
return;
}
System.out.println("ERROR");
}
队列
- offer()----------在队列尾部插入元素 成功返回true 队列满 返回false
- add()- -------- 添加一个元素 如果队列满,则抛出IllegalStateException异常
- put -------------添加一个元素 如果队列满,则阻塞
- peek() ---------返回队列的第一个元素 如果队列为空,则返回null
- element() ----返回队列的头元素 如果队列为空,则抛出NoSuchElementException异常
- poll() -----------移除并返回队列头部的元素 如果队列为空, 则返回null
- isEmpty()-----如果队列为空,则返回true
- remove()------移出并返回头元素 如果队列空,则抛出NoSuchElementException异常
- take() --------- 移出并返回头元素 如果队列空,则阻塞
队列数据反转
@Test
void test1(){
Queue queue = new LinkedList();
queue.add(1);
queue.add(2);
Stack stack = new Stack();
for (int i = 0; i < queue.size(); i++) {
stack.push(queue.poll());
}
for (int i = 0; i < stack.size(); i++) {
queue.offer(stack.pop());
}
while (!queue.isEmpty()){
System.out.println(queue.poll());
}
}