栈:栈这种数据结构的特点是后进先出(LIFO),这个特点被应用到了计算机领域的很多地方,例如编辑文档时的撤销键,函数的调用,括号的匹配等。栈的底层实现可以是数组(动态数组),可以是链表(如果是链表的话,如果链表的底层实现用的是头插法,那么现在栈出栈就可以直接删除第一个位置的元素了)。
public interface Stack<E> {
public int getSize();
public void push(E e);
public E pop();
public E peek();
public boolean isEmpty();
}
队列:队列这种数据结构的特点是先进先出(FIFO)。队列在二叉树和图的遍历的时候会用到,队列如果不设置成循环队列的话,会有个浪费空间的现象,因为进队是尾指针向后走,出队列是头指针向后走。而循环队列就是浪费一个节点空间(因为如果不浪费这个空间的话,就无法判断内存是满了还是此时是空队列)。这个时候指针的移动就不简单的是++了,而是(tail+1)对队列长度取余。
(不是循环队列)此外,队列如果用链表实现的话(头插法),一定要有尾指针,因为如果没有尾指针的话,每次出队列都要循环找到最后一个元素是很费时的。
public interface Queue<E> {
public int getSize() ;
public boolean isEmpty();
public void enQueue(E e);
public E deQueue();
public E firstQueue();
}