用户登录
用户注册

分享至

数据结构-第一篇:线性表

  • 作者: 没有奥特曼de小怪兽
  • 来源: 51数据库
  • 2021-10-19

/**

  • 线性表:
  • 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));
	}
}

转载请注明出处

软件
前端设计
程序设计
Java相关