顺序表和单链表的基本实现(基于Java

顺序表: 

package test;

public class SeqList {
	protected Object[] element;//设置一定长度的对象数组,利用数组实现顺序表的顺序存储和随机存取
	protected int n;
	public SeqList(int length){
		this.element = new Object[length];
		this.n = 0;//n为顺序表中对象数量,即顺序表实际长度
	}
	
	public SeqList(){
		this(64);
	}
	
	public SeqList(Object[] values){
		this(values.length);
		for(int i = 0;i<values.length;i++){
			this.element[i] = values[i];
		}
		this.n = element.length; //当利用形参数组values对顺序表存储对象结束后,更新实际长度n
	}
	
	public boolean isEmpty(){
		return this.n == 0;
	}
	
	public int size(){
		return this.n;
	}
	
	public Object get(int i){
		if(i>=0 && i<this.n){
			return this.element[i];
		}
		return null;
	}
	
	public int search(Object key){
		for(int i = 0;i<this.n;i++){
			if(key.equals(this.element[i])){
				return i;
			}
		}
		return -1;
	}
	
	public void set(int i, Object x){
		if(x == null){
			throw new NullPointerException("x == null");
		}
		if(i>=0 && i<this.n){
			this.element[i] = x;
		}else{
			throw new java.lang.IndexOutOfBoundsException(i+" ");
		}
	}
	
	public Object remove(int i){
		if(this.n>0 && i>=0 && i<this.n){
			Object oldguy = this.element[i];
			for(int j = i;j<this.n-1;j++){
				this.element[j] = this.element[j+1];
			}
			this.element[this.n-1] = null;
			this.n = this.n - 1;
			return oldguy;
		}
		return null;
	}
	
	public String toString(){
		String str = this.getClass().getName()+"(";
		if(this.n>0){
			str += this.element[0].toString();
		}
		for(int i = 1;i<this.n;i++){
			str += ","+this.element[i].toString();
		}
		return str+")";
	}
	
	public int insert(int i, Object x){
		if(x == null){
			throw new NullPointerException("x==null");
		}
		if(!(i>=0 && i<=this.n)){
			throw new java.lang.IndexOutOfBoundsException(i+" ");
		}else{
			if(1+this.n>this.element.length){
				Object[] buffer = new Object[2*this.element.length];
				for(int j = 0;j<this.n;j++){
					buffer[j] = this.element[j];
				}
				this.element = buffer;
				this.n += 1;
			}
			for(int j = this.n-1;j>=i;j--){
				this.element[j+1] = this.element[j];
			}
			this.element[i] = x;
		}
		return i;
	}
	
	public static void main(String[] args){
		Integer[] values = new Integer[20];
		for(int i = 0;i<20;i++){
			values[i] = Integer.valueOf(i);
		}
		SeqList sl = new SeqList(values);
		sl.remove(20);
		System.out.println(sl.toString());
	}
}

单链表:

package test;


public class SinglyList {
	public Node<Integer> head;
	
	public SinglyList(){
		this.head = new Node<Integer>();
	}//初始化单链表,只有一个空的头结点
	
	public SinglyList(Integer[] values){
		this();
		Node<Integer> rear = this.head;
		for(int i = 0;i<values.length;i++){
			rear.next = new Node<Integer>(values[i],null);
			rear = rear.next;
		}
	}
	
	public boolean isEmpty(){
		return this.head == null?true:false;
	}
	
	public Integer get(int i){
		Node<Integer> p = this.head.next;
		for(int j = 0;j<i && p != null;j++){
			p = p.next;
		}
		return (i>=0 && p != null)?p.data:null;
	}
	
	public void set(int i, Integer x){
		Node<Integer> p = this.head.next;
		for(int j = 0;j<i;j++){
			p = p.next;
		}
		p.data = x;
	}
	
	public int size(){
		int i = 0;
		Node<Integer> p = this.head;
		while(p.next != null){
			p = p.next;
			i++;
		}
		return i;
	}
	
	public String toString(){
		String str = this.getClass().getName()+"(";
		Node<Integer> p = this.head;
		while(p.next != null){
			p = p.next;
			str += p.data.toString();
			if(p.next != null){
				str += ",";
			}
		}
		return str+")";
	}
	
	public Node<Integer> insert(int i,Integer x){
		if(x == null){
			throw new NullPointerException("x == null");
		}
		Node<Integer> front = this.head;
		for(int j = 0; j<i && front != null;j++){
			front = front.next;
		}
		Node<Integer> addguy = new Node<Integer>(x,null);
		addguy.next = front.next;
		front.next = addguy;
		return front.next;
	}
	
	public Integer remove(int i){
		Node<Integer> p = this.head;
		for(int j = 0;j<i && p.next != null;j++){
			p = p.next;
		}
		if(i>=0 && p.next != null){
			Integer old = p.next.data;
			p.next = p.next.next;
			
			return old;
		}
		return null;
	}
	
	public static void main(String[] args){
		Integer[] values = new Integer[20];
		for(int i = 0;i<values.length;i++){
			values[i] = i;
		}
		SinglyList sl = new SinglyList(values);
		System.out.println(sl.toString());
		sl.insert(1,111);
		System.out.println(sl.toString());
		sl.remove(1);
		System.out.println(sl.toString());
	}
}
package test;

public class Node<Integer> {
	public Integer data;
	public Node<Integer> next;
	
	public Node(Integer data,Node<Integer> next){
		this.data = data;
		this.next = next;
	}
	
	public Node(){
		this(null,null);
	}
	
	public String toString(){
		return this.data.toString();
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值