我的个人博客
栈 Stack
自定义栈和动态数组实现过程截图
自定义栈和动态数组实现完整代码
Stack.java(栈接口)
1 2 3 4 5 6 7 8
public interface Stack <E > { int getSize () ; boolean isEmpty () ; void push (E e) ; E pop () ; E peek () ; }
Array.java(动态数组)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
public class Array <E > { private E[] data; private int size; public Array (int capacity) { data =(E[])new Object[capacity]; size = 0 ; } public Array () { this (10 ); } public int getSize () { return size; } public int getCapacity () { return data.length; } public boolean isEmpty () { return size == 0 ; } public void addLast (E e) { add(size, e); } public void addFirst (E e) { add(0 , e); } public void add (int index, E e) { if (index < 0 || index > size ){ throw new IllegalArgumentException("Add failed. Require index >=0 and index <= size." ); } if (size == data.length) { resize(2 * data.length); } for (int i = size - 1 ; i >= index ; i --){ data[i + 1 ]=data[i]; } data[index] = e; size ++; } public E get (int index) { if (index < 0 || index >= size) throw new IllegalArgumentException("Get failed. Index is illegal." ); return data[index]; } public E getLast () { return get(size - 1 ); } public E getFirst () { return get(0 ); } public void set (int index, E e) { if (index < 0 || index >= size) throw new IllegalArgumentException("set failed. Index is illegal." ); data[index] = e; } public boolean contains (E e) { for (int i = 0 ; i < size ; i++) { if (data[i].equals(e)) return true ; } return false ; } public int find (E e) { for (int i = 0 ; i < size ; i++) { if (data[i].equals(e)) return i; } return -1 ; } public E remove (int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException("Remove failed. Index is illegal." ); } E ret = data[index]; for (int i = index + 1 ; i < size ; i ++) { data[i-1 ] = data[i]; } size --; data[size] = null ; if (size == data.length / 4 && data.length / 2 != 0 ) resize(data.length / 2 ); return ret; } public E removeFirst () { return remove(0 ); } public E removeLast () { return remove(size-1 ); } public void removeElement (E e) { int index = find(e); if (index != -1 ) remove(index); } @Override public String toString () { StringBuilder res = new StringBuilder(); res.append(String.format("Array: size = %d, capacity = %d \n" , size, data.length)); res.append('[' ); for (int i = 0 ; i < size ; i ++){ res.append(data[i]); if (i != size - 1 ) res.append(", " ); } res.append(']' ); return res.toString(); } private void resize (int newCapacity) { E[] newData = (E[])new Object[newCapacity]; for (int i = 0 ; i < size ; i ++) newData[i] = data[i]; data = newData; } }
ArrayStack.java(自定义动态数组栈)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
public class ArrayStack <E > implements Stack <E > { Array<E> array ; public ArrayStack (int capacity) { array = new Array<>(capacity); } public ArrayStack () { array = new Array<>(); } @Override public int getSize () { return array.getSize(); } @Override public boolean isEmpty () { return array.isEmpty(); } public int getCapacity () { return array.getCapacity(); } @Override public void push (E e) { array.addLast(e); } @Override public E pop () { return array.removeLast(); } @Override public E peek () { return array.getLast(); } @Override public String toString () { StringBuilder res = new StringBuilder(); res.append("Stack: " ); res.append('[' ); for (int i = 0 ; i < array.getSize() ; i ++){ res.append(array.get(i)); if (i != array.getSize()-1 ) res.append(", " ); } res.append("] top" ); return res.toString(); } }
Main.java(测试栈的后进先出原理)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public class Main { public static void main (String[] args) { ArrayStack<Integer> stack = new ArrayStack<>(); for (int i = 0 ; i < 5 ; i++){ stack.push(i); System.out.println(stack); } stack.pop(); System.out.println(stack); } }
FROM:gylq.gitee Author:孤桜懶契
免责声明: 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/729938.html
复制链接
复制链接
左青龙
微信扫一扫
右白虎
微信扫一扫
评论