数据结构——线性表(Java实现)

此处包括一个泛型线性表抽象类,一个Integer型实现类,一个测试类。

实现了线性表的以下功能:

1.插入

2.删除

3.追加

4.查找

5.取元素

6.判空

7.求长度

以下为代码:

泛型线性表抽象类

LinearList.java:

package orderedlist;

import java.lang.reflect.Array;

public abstract class LinearList<T> {

	private int maxSize = 1024;
	private int size;
	private T arr[];
	
	public LinearList(Class<T> type) {
//		arr = (T[])(new Object[this.maxSize]);		//错误的生成方式
		arr = (T[])(Array.newInstance(type, maxSize));
		size = 0;
	}
	
	public LinearList(Class<T> type, int maxSize) {
//		arr = (T[])(new Object[this.maxSize]);		//错误的生成方式
		arr = (T[])(Array.newInstance(type, maxSize));
		size = 0;
	}
	
    public int getMaxSize() {
		return maxSize;
	}


	public void setMaxSize(int maxSize) {
		this.maxSize = maxSize;
	}


	public int getSize() {
		return size;
	}

	public T[] getArr() {
		return arr;
	}

	public void insert(T t, int index) {
		if(index > size + 1) {
			throw new IllegalArgumentException("out of range, size is " + size);
		}
		if(size + 1 > maxSize) {
			throw new IllegalArgumentException("new element will be out of limits.");
		}
		size++;
		for(int i = size - 1; i >= index + 1; i--) {
			arr[i] = arr[i - 1];
		}
		arr[index] = t;
	}

	public void add(T t) {
		if(size + 1 > maxSize) {
			throw new IllegalArgumentException("new element will be out of limits.");
		}
		arr[size] = t;
		size++;
	}
	
	public void remove(int index) {
		if(index > size) {
			throw new IllegalArgumentException(index + " is out of bounds.");
		}
		for(int i = index + 1; i < size; i++) {
			arr[i - 1] = arr[i];
		}
		arr[size - 1] = null;
		size--;
	}
	
	public void removeAll(T t) {
		if(this.contains(t) == false) {
			System.out.println("there is no such element.");
		}else {			
			do {
				for(int i = 0; i < size; i++) {
					if(arr[i].equals(t)) {
						this.remove(i);
						break;
					}
				}
			}while(this.contains(t) == true);
		}
	}
	
	public T getElem(int index) {
		if(index > size) {
			throw new IllegalArgumentException(index + " is out of bounds.");
		}
		return arr[index];
	}
	
	public int[] getAllIndex(T t) {
		int a[] = new int[size];
		int index = 0;
		for(int i = 0; i < size; i++) {
			if(arr[i].equals(t)) {
				a[index++] = i;
			}
		}
		int b[] = new int[index];
		for(int i = 0; i < index; i++) {
			b[i] = a[i];
		}
		return b;
	}
	
	public void printAllIndex(T t) {
		int a[] = this.getAllIndex(t);
		if(a.length == 0) {
			System.out.println("there is no such element.");
		}
		System.out.println("this element is at following indexes:");
		for(int i = 0; i < a.length; i++) {
			if(i != a.length - 1) {
				System.out.print(a[i] + ", ");
			}else {
				System.out.println(a[i]);
			}
		}
	}
	
	public boolean isEmpty() {
		if(size == 0) {
			return true;
		}
		return false;
	}
	
    
	public boolean contains(T t) {
		boolean flag = false;
		for(int i = 0; i < size; i++) {
			if(arr[i].equals(t)) {
				flag = true;
				break;
			}
		}
		return flag;
	}

}

 Integer型实现类

IntergerLinearList.java:

package orderedlist;

public class IntergerLinearList extends LinearList<Integer> {
	
	public IntergerLinearList() {
		super(Integer.class);
	}
	
	public IntergerLinearList(int maxSize) {
		super(Integer.class, maxSize);
	}

	public String toString() {
		String s = "";
		for(int i = 0; i < this.getSize(); i++) {
			if(i != this.getSize() - 1) {
				s += this.getArr()[i].toString() + ", ";
			}else {
				s += this.getArr()[i].toString();
			}
		}
		return s;
	}

}

测试类

IntergerLinearListDemo.java:

package orderedlist;

public class IntergerLinearListDemo {

	public static void main(String[] args) {
			IntergerLinearList demo = new IntergerLinearList(100);
			demo.add(8);
			demo.add(10);
			demo.add(15);
			demo.add(12);
			demo.add(3);
			demo.add(4);
			demo.add(13);
			demo.add(1);
			demo.add(5);
			System.out.println(demo);
			
			System.out.println("================");	
			
			demo.insert(99, 1);
			System.out.println(demo);
			
			System.out.println("================");
			
			demo.add(21);
			System.out.println(demo);
			
			System.out.println("================");			
			
			demo.remove(1);
			System.out.println(demo);
			
			System.out.println("================");
			
			System.out.println(demo.getElem(3));
			
			System.out.println("================");			
			
			demo.insert(77, 7);
			demo.insert(77, 2);
			demo.insert(77, 4);
			demo.insert(77, 10);
			demo.insert(77, 11);
			System.out.println(demo);
			System.out.println("================");			
			demo.printAllIndex(77);
			System.out.println("================");
			demo.removeAll(77);
			System.out.println(demo);
			
			System.out.println("================");
			
	}

}

输出结果:

8, 10, 15, 12, 3, 4, 13, 1, 5
================
8, 99, 10, 15, 12, 3, 4, 13, 1, 5
================
8, 99, 10, 15, 12, 3, 4, 13, 1, 5, 21
================
8, 10, 15, 12, 3, 4, 13, 1, 5, 21
================
12
================
8, 10, 77, 15, 77, 12, 3, 4, 13, 77, 77, 77, 1, 5, 21
================
this element is at following indexes:
2, 4, 9, 10, 11
================
8, 10, 15, 12, 3, 4, 13, 1, 5, 21
================

猜你喜欢

转载自blog.csdn.net/g28_gwf/article/details/81697451
今日推荐