队列和栈学习

队列的结构讲解

队列只允许从尾部加入元素,从头部删去元素(是一个先进先出的数据结构)

它的指针指向一般是左闭右开式(head指向首个数据,tail指向待插入数据的位置)

队列的结构定义图

出队操作:head向后移动一个指针

入队操作:待插入元素插入tail指针指向的位置,tail向后移动一位

队列的假溢出:

尾指针虽然越界,但是队列中数据的实际数量并没有超过队列的上限

假溢出表示

=》因此,提出了循环队列,当count<size时,tail指向0位置

栈的结构讲解

单头进,单头出(先进后出)--方法的调用可以可此处关联

栈的结构

出栈:top指针向下移动一位

入栈:top指针向上移动一位,将数据插入进来

代码展示

这只是博主写做练习的

package Stack; public class Stack<T> implements mystack<T>{ /** * 注意此处,栈在一开始没有数据,所以top=-1 */ private int top = -1; private T[] element; int size = 0; //创建栈 public Stack(int length){ element = (T[])new Object[length]; size = length; } //入栈 @Override public void push(T x) { if(top==size-1){ System.out.println("栈已满"); return; } element[++top] = x; } @Override public void pop() { if(top>=0){ top--; }else { System.out.println("栈为空"); } } @Override public T top() { return element[top]; } }

java中自带的:

//应该是双端队列(即两边都可以进行数据的插入和删除)

package Stack; import java.util.ArrayDeque; import java.util.Deque; public class test { public static void main(String[] args) { Deque deque = new ArrayDeque(); //java中实现栈的最佳选择 deque.push(1); deque.push(2); deque.peek() ;//获取第一个元素 } }