注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 [业内传闻]今天,7月25日..
 帮助

Java:单链表的数组实现


2007-12-12 20:41:11
 标签: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;
        }
    }
}

本文出自 “子 孑” 博客,转载请与作者联系!



上一篇 C:文件操作  下一篇 Java:Farey序列



    文章评论
 
2007-12-13 10:08:19
受益匪浅啊 不错

2007-12-14 10:29:16
呵呵。不错。值得学习!

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: