其他分享
首页 > 其他分享> > 栈与队列

栈与队列

作者:互联网

定义:栈又称为堆栈,是一种运算受限的线性表,这是因为它仅允许在线性表的固定一端(表尾)进行插入、删除和读取元素等运算,不允许在其他任何位置进行运算
特点:后进先出
时间复杂度:O(1)

一、栈的基本操作:

在Java程序里面用Stack来描述栈的操作,这个类定义如下:
public class Stack< E > extends Vector< E >
可以发现Stack是Vector的子类,但他使用的并不是Vector类之中所提供的方法,而是采用如下的几种方法

1.push();
入栈,向栈顶插入一个元素
2.pop();
出栈,删除栈顶元素并返回
3.empty();
判断栈是否为空
4.peek();
获取栈顶元素
5. size();
访问栈中元素个数
6.clean();
清空栈内元素

队列

定义:队列简称队,也是运算受限的线性表,仅允许在表的一段插入,另一端删除。允许插入的一端做队尾,进行删除的一端做队首。
特点:先进先出
时间复杂度:O(1)
在这里插入图片描述

一、队列的基本操作

在Java程序里面用Queue来描述队列的操作,这个类定义如下:
public interface Queue extends Collection< E >
Queue使用时要尽量避免使用Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。

1.offer();
往队列添加元素如果队列已满直接返回false,队列未满则直接插入并返回true;
2.add();
是对offer()方法的简单封装.如果队列已满,抛出异常new IllegalStateException(“Queue full”);
3.put();
往队列里插入元素,如果队列已经满,则会一直等待直到队列为空插入新元素,或者线程被中断抛出异常.
4.remove();
直接删除队头的元素:
5.peek();
直接取出队头的元素,并不删除.
6.element();
对peek方法进行简单封装,如果队头元素存在则取出并不删除,如果不存在抛出异常NoSuchElementException()
7.pool();
取出并删除队头的元素,当队列为空,返回null;
8.take();
取出并删除队头的元素,当队列为空,则会一直等待直到队列有新元素可以取出,或者线程被中断抛出异常

栈与队列速度快慢

1.栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性。
2.队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快。

标签:遍历,队头,删除,队列,元素,插入
来源: https://blog.csdn.net/qq_52355487/article/details/115441157