数据结构与算法(二)(栈、队列)
这篇笔记主要写栈和队列,因为他们的特点是相反的
一、栈
特点:先进后出,类似于子弹入弹夹,先进去的子弹最后才发射
这里也使用数组来模拟一下,有四个方法,压栈,取栈,查看栈顶,是否为空
//栈的底层我们使用数组来存储数据 int[] elements; public StackTest1() { elements = new int[0]; } //压栈(压入元素) public void push(int element){ // 创建一个新的数组 int[] newArr = new int[elements.length + 1]; // 把原数据复制到新数组中 for (int i = 0; i < elements.length; i++) { newArr[i] = elements[i]; } // 把添加的元素放入新数组中 newArr[elements.length] = element; // 使用新数组替换久数组 elements = newArr; } //取出栈顶元素 public int pop(){ //栈中没有元素 if(elements.length==0){ throw new RuntimeException("stack is empty"); } //取出数组的最后一个元素 int element = elements[elements.length-1]; //创建一个新的数组 int[] newArr = new int[elements.length-1]; //把原数组中除了最后一个元素的其他元素都放在新数组中 for(int i = 0;i<elements.length-1 ;i++){ newArr[i] = elements[i]; } //替换数组 elements = newArr; //返回栈顶元素 return element; } //查看栈顶元素 public int peek(){ return elements[elements.length-1]; } //判断栈是否为空 public boolean isEmpty(){ return elements.length==0; }
测试类
//创建一个栈 StackTest1 ms = new StackTest1(); //压入数据 ms.push(9); ms.push(8); ms.push(7); //出栈 System.out.println(ms.pop()); //查看栈顶元素 System.out.println(ms.peek()); //查看栈是否为空 System.out.println(ms.isEmpty());
结果:
在java中集合Vector的子类就是Stack
二、队列
特点:先进先出,就跟我们日常生活的排队一样
代码演示:也用数组演示,这里写了三个方法,入队,出队,是否为空
int[] elements; public QueueTest(){ elements = new int[0]; } //入队 public void add(int element){ // 创建一个新的数组 int[] newArr = new int[elements.length + 1]; // 把原数据复制到新数组中 for (int i = 0; i < elements.length; i++) { newArr[i] = elements[i]; } // 把添加的元素放入新数组中 newArr[elements.length] = element; // 使用新数组替换久数组 elements = newArr; } //出队 public int poll(){ //把数组中第0个元素取出来 int element = elements[0]; //创建一个新的数组 int[] newArr = new int[elements.length-1]; // for(int i = 0;i<newArr.length;i++){ newArr[i] = elements[i+1]; } //替换数组 elements = newArr; return element; } //判断队列是否为空 public boolean isEmpty(){ return elements.length==0; }
测试类
//创建一个队列 QueueTest qt = new QueueTest(); //入队 qt.add(9); qt.add(8); qt.add(7); //出队 System.out.println(qt.poll()); //是否为空 System.out.println(qt.isEmpty()); System.out.println(qt.poll()); System.out.println(qt.poll()); System.out.println(qt.isEmpty());
结果
在java中,也有队列就是Queue接口,和List、Set接口并列