欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-10 17:51:27
线性表...

/**

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

转载请注明出处

本文地址:https://blog.csdn.net/qq_41897167/article/details/109828257

相关标签: 数据结构 java