資料結構-第一篇:線性表

0你好我是1發表於2020-11-20

/**

  • 線性表:
  • 1.存在唯一的一個被稱作“第一個”的資料元素
  • 2.存在唯一的一個被稱作“最後一個”的資料元素
  • 3.除第一個之外,結構中的每個資料元素均只有一個前驅
  • 4.除最後一個之外,結構中的每個資料元素均只有一個後繼
  • 資料元素的位置與它的值相關時(即有序),稱為有序線性表;否則,稱為無序線性表
  • 線性表的順序儲存表示:
  • 用一組地址連續的儲存單元依次儲存線性表的資料元素,稱這種儲存結構的線性表為順序表
  • 一般用陣列表示
  • @author hopefully

*/

public class _04linearList<T> {
	//順序表中一維陣列的初始容量
	private final int MAX_SIZE=10;
	//儲存元素的陣列物件
	private T[] listArray;
	//儲存順序表的當前長度
	private int length;
	//構造一個空的順序表
	public _04linearList(){
		//順序表初始為空
		length=0;
		listArray=(T[])new Object[MAX_SIZE];
	}
	
	public _04linearList(int n) {
		if(n<=0) {
			System.out.println("error");
			System.exit(1);
		}
		length=0;
		listArray=(T[])new Object[n];
	}
	//判斷順序表是否為空
	public boolean isEmpty() {
		return length==0;
	}
	
	//順序表的插入
	public boolean add(T obj,int pos) {
		if(pos<1||pos>length+1) {
			System.out.println("pos值不合法");
			return false;
		}
		//判斷順序表是否滿,滿就擴充套件為原來的兩倍,並將原陣列的值賦給新陣列
		if(length==listArray.length) {
			T[] p=(T[])new Object[2*length];
			for(int i=0;i<length;i++) {
				p[i]=listArray[i];
			}
			listArray=p;
		}
		for(int i=length;i>=pos;i--) {
			listArray[i]=listArray[i-1];
		}
		listArray[pos-1]=obj;
		length++;
		return true;
	}
	
	//順序表的刪除
	public T delete(int pos) {
		if(isEmpty()) {
			System.out.println("順序表為空,無法執行刪除操作");
			return null;
		}
		if(pos<1||pos>length) {
			System.out.println("pos不合法");
			return null;
		}
		T val=listArray[pos-1];
		for(int i=pos;i<length;i++) {
			listArray[i-1]=listArray[i];
		}
		length--;
		return val;
	}
	//順序表的查詢
	public int find(T obj) {
		if(isEmpty()) {
			System.out.println("順序表為空");
			return -1;
		}
		for(int i=0;i<length;i++) {
			if(listArray[i].equals(obj)) {
				return i+1;
			}
		}
		return -1;
	}
	
	//順序表的按序號查詢
	public T value(int pos) {
		if(isEmpty()) {
			System.out.println("順序表為空");
			return null;
		}
		if(pos<1||pos>length) {
			System.out.println("pos值不合法");
			return null;
		}
		return listArray[pos-1];
	}
	//順序表更新元素
	public boolean modify(T obj, int pos) {
		if(isEmpty()) {
			System.out.println("順序表為空,無法修改");
			return false;
		}
		if(pos<1||pos>length) {
			System.out.println("pos值不合法");
			return false;
		}
		listArray[pos-1]=obj;
		return true;
	}
	
	//順序表的長度
	public int size() {
		return length;
	}
	//遍歷順序表
	public void list() {
		for(int i=0;i<length;i++) {
			System.out.print(listArray[i]+" ");
		}
		System.out.println();
	}
	//順序表清空
	public void clear() {
		length=0;
	}
	public static void main(String[] args) {
		_04linearList<Integer> list=new _04linearList<Integer>();
		for(int i=0;i<20;i++) {
			list.add(i+1, i+1);
		}
		list.list();
		list.modify(52, 13);
		list.list();
		list.delete(13);
		list.list();
		System.out.println(list.value(13));
	}
}

轉載請註明出處

相關文章