1.栈(stack)
1.1概念:栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进入数据插入和删除操作的一端称为栈顶,另外一端称为栈底。栈中的数据元素遵循后进先出LIFO(Last In First Out)原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,如数据在栈顶
出栈:栈的删除操作叫做出栈。出数据在栈顶

1.2stack.push()与stack.pop()遵循先进后出原则如图:

1.3stack的常用方法:Stack()----构造一个空的栈
E push(E e)----将e入栈,并返回e
E pop()----将栈顶元素出栈并返回
E peek()----获取栈顶元素
int sizes()----获取栈中的有效元素个数
boolean empty()----检测栈是否为空
public static void main(String[] args) {
StackInteger> s = new Stack();
s.push(1);
s.push(2);
s.push(3);
s.push(4);
System.out.println(s.size()); // 获取栈中有效元素个数---> 4
System.out.println(s.peek()); // 获取栈顶元素---> 4
s.pop(); // 4出栈,栈中剩余1 2 3,栈顶元素为3
System.out.println(s.pop()); // 3出栈,栈中剩余1 2 栈顶元素为3
if(s.empty()){
System.out.println("栈空");
}else{
System.out.println(s.size());
}
}
1.4栈的应用场景:
1.4.1.改变元素的序列
eg.若进栈序列为1,2,3,4,进栈过程中可以出栈,则下列不可能的出栈序列为(C)
A.1,4,3,2 B.2,3,4,1 C.3,1,4,2 D.3,4,2,1
C:错误的原因是3出了之后必须为2,因为是1,2,3的顺序进栈,根据后进先出原则,所以应该3之后是2.
1.4.2.逆序打印链表(除了递归)
void printList(Node head){
if(head == null)
return;
Stack<Node> stack = new Stack<>();
Node cur = head;
while(cur != null){
stack.push(cur);//将链表依次放入栈中,在通过打印栈实现逆序打印链表
cur = cur.next;
}
while(!stack.Empty()){
System.out.print(s.pop()+" ");
}
}
2.队列(Queue)
2.1概念:队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO原则。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。

2.2队列的常用方法:boolean offer(E e)----入队列
E poll()----出队列
peek()----获取队头元素
int size()----获取队列中的有效元素个数
boolean isEmpty()----检测队列是否为空
注意:Queue是一个接口,在实例化时必须要实例化LinkedList对象,因为LinkedList实现了Queue接口
public static void main(String[] args){
Queue<Integer> q = new LinkedList<>();
q.offer(1);
q.offer(2);
q.offer(3);
q.offer(4);
q.offer(5);//从队尾入列
System.out.print(q.size());//获取队列中的有效元素
System.out.print(q.peek());//获取队头元素
q.poll();
System.out.print(q.poll());//从队头出队列,并将删除的元素返回
if(q.isEmpty()){
System.out.print("队列为空");
}else{
System.out.print(q.size());
}
}
2.3循环队列
实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。 环形队列通常使用数组实现。

2.3.1数组下标循环技巧:
1.下标最后再往后:index=(index+offset)%array.length;

2.下标最前再往前:index=(index+array.length-offset)%array.length;

2.3.2 区分空和满
1.通过size属性记录
2.保留一个位置
3.使用标记

2.3.4 双端队列(Deque)
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。

Deque是一个接口,使用时必须创建LinkedList对象
3266

被折叠的 条评论
为什么被折叠?



