Java:单链表的数组实现
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 |
1.底层由一个数组实现; 2.在查找表尾时,可直接定位到节点O(1); 3.在删除和插入节点时,需要大量移动数据; 4.由于数组空间预先设定,当实际容量大于数组空间时,需要重新分配数组空间; 基于如下接口实现实现数组单链表 public interface CharLinkedList { int getSize(); boolean isEmpty(); char first(); char last(); char removeFirst(); char removeLast(); void insertFirst(char c); void insertLast(char c); } 具体实现类 (在每次插入操作时,需要执行checkCapcity(),如果发现实际空间已经占满预设值,需要重新分配数组空间) public class CharArrayList implements CharLinkedList { private int size;//链表实际大小 private int capcity = 100;//数组预设大小 private char[] chars = new char[capcity];//底层数组 public int getSize() { return size; } public boolean isEmpty() { return size == 0; } public char first() { if (isEmpty() == false) return chars[0]; else throw new UnsupportedOperationException("List empty"); } public char last() { if (isEmpty() == false) return chars[size - 1]; else throw new UnsupportedOperationException("List empty"); } public char removeFirst() { if (isEmpty() == true) throw new UnsupportedOperationException("List empty"); else { char c = chars[0]; for (int i = 0; i < size - 1; i++) chars[i] = chars[i + 1]; size--; return c; } } public char removeLast() { char c = chars[size - 1]; size--; return c; } public void insertFirst(char c) { checkCapcity(); for (int i = size; i > 0; i--) chars[i] = chars[i - 1]; size++; chars[0] = c; } public void insertLast(char c) { checkCapcity(); chars[size++] = c; } private void checkCapcity() { if (size + 1 > capcity) { capcity <<= 1; char[] newchars = new char[capcity]; for (int i = 0; i < size; i++) newchars[i] = chars[i]; chars = newchars; } } } 本文出自 “子 孑” 博客,转载请与作者联系! 本文出自 51CTO.COM技术博客 |



zhangjunhd
博客统计信息
热门文章
最新评论
友情链接

