三 栈、队列、链表
- 10.栈
- 11.队列
- 12.单链表
- 13.删除单链表中的节点
- 14.往单链表中插入节点
- 15.循环链表
- 16.双向循环链表
栈
package demo2; public class MyStack { //栈的底层我们使用数组来存储数据 int[] elements; public MyStack() { 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() { //栈中没有元素 if(elements.length==0) { throw new RuntimeException("stack is empty"); } return elements[elements.length-1]; } //判断栈是否为空 public boolean isEmpty() { return elements.length==0; } }
队列
package demo2; import javax.swing.text.DefaultStyledDocument.ElementSpec; public class MyQueue { int[] elements; public MyQueue() { 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; } }
package demo2.test; import demo2.MyQueue; public class TestMyQueue { public static void main(String[] args) { //创建一个队列 MyQueue mq = new MyQueue(); //入队 mq.add(9); mq.add(8); mq.add(7); //出队 System.out.println(mq.poll()); mq.add(6); System.out.println(mq.poll()); System.out.println(mq.poll()); System.out.println(mq.isEmpty()); System.out.println(mq.poll()); } }
单链表
删除单链表中的节点
往单链表中插入节点
循环链表
双向循环链表