队列和栈学习
队列的结构讲解
队列只允许从尾部加入元素,从头部删去元素(是一个先进先出的数据结构)
它的指针指向一般是左闭右开式(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() ;//获取第一个元素 } }