《漫画算法》源码整理-2 数组 链表 队列
生活随笔
收集整理的這篇文章主要介紹了
《漫画算法》源码整理-2 数组 链表 队列
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)組操作
public class MyArray {private int[] array;private int size;public MyArray(int capacity){this.array = new int[capacity];size = 0;}/*** 數(shù)組插入元素* @param index 插入的位置* @param element 插入的元素*/public void insert(int index, int element) throws Exception {//判斷訪問下標(biāo)是否超出范圍if(index<0 || index>size){throw new IndexOutOfBoundsException("超出數(shù)組實(shí)際元素范圍!");}//如果實(shí)際元素達(dá)到數(shù)組容量上線,數(shù)組擴(kuò)容if(size >= array.length){resize();}//從右向左循環(huán),逐個(gè)元素向右挪一位。for(int i=size-1; i>=index; i--){array[i+1] = array[i];}//騰出的位置放入新元素array[index] = element;size++;}/*** 數(shù)組擴(kuò)容*/public void resize(){int[] arrayNew = new int[array.length*2];//從舊數(shù)組拷貝到新數(shù)組System.arraycopy(array, 0, arrayNew, 0, array.length);array = arrayNew;}/*** 數(shù)組刪除元素* @param index 刪除的位置*/public int delete(int index) throws Exception {//判斷訪問下標(biāo)是否超出范圍if(index<0 || index>=size){throw new IndexOutOfBoundsException("超出數(shù)組實(shí)際元素范圍!");}int deletedElement = array[index];//從左向右循環(huán),逐個(gè)元素向左挪一位。for(int i=index; i<size-1; i++){array[i] = array[i+1];}size--;return deletedElement;}/*** 輸出數(shù)組*/public void output(){for(int i=0; i<size; i++){System.out.println(array[i]);}}public static void main(String[] args) throws Exception {MyArray myArray = new MyArray(4);myArray.insert(0,3);myArray.insert(1,7);myArray.insert(2,9);myArray.insert(3,5);myArray.insert(1,6);myArray.insert(5,8);myArray.delete(3);myArray.output();} }鏈表操作
public class MyLinkedList {//頭節(jié)點(diǎn)指針private Node head;//尾節(jié)點(diǎn)指針private Node last;//鏈表實(shí)際長度private int size;/*** 鏈表插入元素* @param index 插入位置* @param data 插入元素*/public void insert(int index, int data) throws Exception {if (index<0 || index>size) {throw new IndexOutOfBoundsException("超出鏈表節(jié)點(diǎn)范圍!");}Node insertedNode = new Node(data);if(size == 0){//空鏈表head = insertedNode;last = insertedNode;} else if(index == 0){//插入頭部insertedNode.next = head;head = insertedNode;}else if(size == index){//插入尾部last.next = insertedNode;last = insertedNode;}else {//插入中間Node prevNode = get(index-1);insertedNode.next = prevNode.next;prevNode.next = insertedNode;}size++;}/*** 鏈表刪除元素* @param index 刪除的位置*/public Node remove(int index) throws Exception {if (index<0 || index>=size) {throw new IndexOutOfBoundsException("超出鏈表節(jié)點(diǎn)范圍!");}Node removedNode = null;if(index == 0){//刪除頭節(jié)點(diǎn)removedNode = head;head = head.next;if(size == 1){last = null;}}else if(index == size-1){//刪除尾節(jié)點(diǎn)Node prevNode = get(index-1);removedNode = prevNode.next;prevNode.next = null;last = prevNode;}else {//刪除中間節(jié)點(diǎn)Node prevNode = get(index-1);Node nextNode = prevNode.next.next;removedNode = prevNode.next;prevNode.next = nextNode;}size--;return removedNode;}/*** 鏈表查找元素* @param index 查找的位置*/public Node get(int index) throws Exception {if (index<0 || index>=size) {throw new IndexOutOfBoundsException("超出鏈表節(jié)點(diǎn)范圍!");}Node temp = head;for(int i=0; i<index; i++){temp = temp.next;}return temp;}/*** 輸出鏈表*/public void output(){Node temp = head;while (temp!=null) {System.out.println(temp.data);temp = temp.next;}}/*** 鏈表節(jié)點(diǎn)*/private static class Node {int data;Node next;Node(int data) {this.data = data;}}public static void main(String[] args) throws Exception {MyLinkedList myLinkedList = new MyLinkedList();myLinkedList.insert(0,3);myLinkedList.insert(0,4);myLinkedList.insert(2,9);myLinkedList.insert(3,5);myLinkedList.insert(1,6);myLinkedList.remove(0);myLinkedList.output();} }隊(duì)列操作
public class MyQueue {private int[] array;private int front;private int rear;public MyQueue(int capacity){this.array = new int[capacity];}/*** 入隊(duì)* @param element 入隊(duì)的元素*/public void enQueue(int element) throws Exception {if((rear+1)%array.length == front){throw new Exception("隊(duì)列已滿!");}array[rear] = element;rear =(rear+1)%array.length;}/*** 出隊(duì)*/public int deQueue() throws Exception {if(rear == front){throw new Exception("隊(duì)列已空!");}int deQueueElement = array[front];front =(front+1)%array.length;return deQueueElement;}/*** 輸出隊(duì)列*/public void output(){for(int i=front; i!=rear; i=(i+1)%array.length){System.out.println(array[i]);}}public static void main(String[] args) throws Exception {MyQueue myQueue = new MyQueue(6);myQueue.enQueue(3);myQueue.enQueue(5);myQueue.enQueue(6);myQueue.enQueue(8);myQueue.enQueue(1);myQueue.deQueue();myQueue.deQueue();myQueue.deQueue();myQueue.enQueue(2);myQueue.enQueue(4);myQueue.enQueue(9);myQueue.output();} } 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的《漫画算法》源码整理-2 数组 链表 队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《漫画算法》源码整理-1 时间复杂度 空
- 下一篇: 《漫画算法》源码整理-3 二叉树遍历