数据结构 栈和队列
来源:互联网 发布:淘宝ugg授权书怎么弄 编辑:程序博客网 时间:2024/05/20 07:51
概述
栈和队列都是通过动态集合来存储数据,在栈和队列中添加和删除数据都是预先设定的,在栈(Stack)中,被删除的元素是最近添加的元素,所以栈的实现方式是后进先出(Last-in, First-out);在队列中,被删除的元素是最开始添加的的元素,也就是在动态集合中存放时间最长的那个元素,所以队列的实现方式是先进先出(First-in,First-out)。
栈
在栈的数据结构中,添加元素的操作被称之为入栈(PUSH),删除元素的操作被称之为出栈,也可以称为弹出(POP)。如果栈中不存在任何一个元素,那么这个栈被称为空栈。
栈的代码实现
package structdemo;/** * 栈 */public class Stack<E> { /** * 初始大小 */ private static final int DEFAULT_CAPACITY = 10; private Object[] elementData; public Stack() { elementData = new Object[DEFAULT_CAPACITY]; } private int size; public int getSize() { return size; } /** * 判断元素是否为空 */ public boolean isEmpty() { return size == 0 ? true : false; } /** * 压入 * * @param e */ public void push(E e) { ensureCapacity(); elementData[size] = e; size++; } /** * 数组扩容 */ private void ensureCapacity() { int oldCapacity = elementData.length; if (size == oldCapacity) { int newCapacity = oldCapacity + (oldCapacity >> 1); Object[] newTable = new Object[newCapacity]; System.arraycopy(elementData, 0, newTable, 0, size); elementData = newTable; } } /** * 出栈 * * @return */ public E pop() { if (size == 0) { return null; } E e = (E) elementData[size - 1]; size--; return e; }}
队列
在队列中,添加元素的操作被称之为入队(enqueue),而删除元素的操作被称之为出队(dequeue)。在队列中,会有队头(head)和队尾(tail)。当一个元素入队时,该元素就被放入到队尾的位置,而出队的元素就是队头的元素。
队列的代码实现
package structdemo;/** * 队列 * * @author zhangke * * @param <E> */public class Queue<E> { /** * 初始大小 */ private static final int DEFAULT_CAPACITY = 10; private Object[] elementData; /** * 队头和队尾 */ private E head, tail; public Queue() { elementData = new Object[DEFAULT_CAPACITY]; } private int size; public int getSize() { return size; } /** * 判断元素是否为空 */ public boolean isEmpty() { return size == 0 ? true : false; } /** * 入队 * * @param e */ public void enqueue(E e) { ensureCapacity(); elementData[size] = e; size++; } /** * 数组扩容 */ private void ensureCapacity() { int oldCapacity = elementData.length; if (size == oldCapacity) { int newCapacity = oldCapacity + (oldCapacity >> 1); Object[] newTable = new Object[newCapacity]; System.arraycopy(elementData, 0, newTable, 0, size); elementData = newTable; } } /** * 弹出 * * @return */ public E dequeue() { if (size == 0) { return null; } E e = (E) elementData[0]; System.arraycopy(elementData, 1, elementData, 0, size - 1); elementData[--size] = null; return e; } /** * 队头 * * @return */ public E getHead() { if (size == 0) { return null; } return (E) elementData[0]; } /** * 队尾 * * @return */ public E getTail() { if (size == 0) { return null; } return (E) elementData[size - 1]; }}
0 0
- 数据结构-栈和队列
- 数据结构-栈和队列
- 数据结构--栈和队列
- 数据结构-栈和队列
- 数据结构-栈和队列
- 数据结构 栈和队列
- 数据结构-栈和队列
- 数据结构-栈和队列
- 数据结构-栈和队列
- 数据结构:栈和队列
- 数据结构-栈和队列
- 数据结构--栈和队列
- 【数据结构】队列和栈
- 数据结构--栈和队列
- 【数据结构】-栈和队列
- 数据结构 栈和队列
- 数据结构-栈和队列
- 【数据结构】栈和队列
- CSS属性选择器
- 欢迎使用CSDN-markdown编辑器
- windows版本的mysql无法远程连接服务器上的mysql的问题,错误代码10060
- 考研经验分享
- java基础知识学习之代理深入学习(用动态代理实现AOP,FacotryBean)
- 数据结构 栈和队列
- 一起学react native(5) mobx配合FlatList实现高性能im聊天界面
- Android开发最佳学习路线图
- 谈谈padding对块级元素宽度的影响
- html5的新特性的总结
- LeetCode 101. Symmetric Tree
- Spring AOP(2)- 后置增强 实现
- 关于浏览器网站栏中URL的探究(一)初步认识各部分
- 逆向工程核心原理学习笔记(七):总结