牛骨文教育服务平台(让学习变的简单)
博文笔记

数据结构-用二维数组构造列表

创建时间:2014-03-18 投稿人: 浏览次数:1400
package com.data.struct;

/**
 * 二位数组实现列表
 * 第一行表示next
 * 第二行表示value
 * 第三行表示prev
 * @author Administrator
 *
 */
public class ArrayNodeList {
	private int[][]storage;
	private int head;
	private int free;
	
	public ArrayNodeList(int size){
		storage=new int[3][size];
		head=-1;
		free=0;
		for(int i=0;i<size-1;i++){
			storage[0][i]=i+1;
		}
		storage[0][size-1]=-1;
		
	}
	/**
	 * 获取某个位置的值
	 * @param index
	 * @return
	 */
	public int getValue(int index){
		return storage[1][index];
	}
	/**
	 * 分配内存
	 * @return
	 * @throws Exception
	 */
	private int locateObject()throws Exception{
		if(free==-1){
			throw new Exception("out of space");
		}else{
			int x=free;
			free=storage[0][free];
			return x;
		}
		
	}
	/**
	 * 释放内存
	 * @param x
	 */
	private void freeObject(int x){
		storage[0][x]=free;
		free=x;
	}
	/**
	 * 打印
	 */
	public void print(){
		int x=head;
		while(x!=-1){
			System.out.print(storage[1][x]+" ");
			x=storage[0][x];
		}
		System.out.println();
	}
	/**
	 * 搜索值为k的为位置
	 * @param k
	 * @return
	 */
	public int search(int k){
		int x=head;
		while(x!=-1&&storage[1][x]!=k){
			x=storage[0][x];
		}
		return x;
	}
	/**
	 * 插入值为value的数据
	 * @param value
	 * @throws Exception
	 */
	public void insert(int value)throws Exception{
		int x=locateObject();
		storage[0][x]=head;
		storage[1][x]=value;
		storage[2][x]=-1;
		if(head!=-1){
			storage[2][head]=x;
		}
		head=x;
	}
	/**
	 * 删除位置为index的数据
	 * @param index
	 * @throws Exception
	 */
	public void delete(int index)throws Exception{
		if(storage[2][index]!=-1){
			storage[0][storage[2][index]]=storage[0][index];
		}else{
			head=storage[0][index];
		}
		if(storage[0][index]!=-1){
			storage[2][storage[0][index]]=storage[2][index];
		}
		freeObject(index);
	}
	public static void main(String[] args)throws Exception {
		ArrayNodeList list=new ArrayNodeList(10);
		list.print();
		list.insert(10);
		list.insert(20);
		list.print();
		list.delete(1);
		list.print();
		list.insert(30);
		list.insert(40);
		list.print();
		//list.delete(2);
		//list.print();
		System.out.println(list.getValue(list.search(30)));

	}

}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。