数据结构与算法——线性表之顺序表(JAVA语言实现 )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FelikZhang/article/details/79824637

数据结构与算法——线性表之顺序表(JAVA语言实现 )


线性表是由n个数据元素组成的优先序列。

线性表中每个元素都必须有相同的结构,线性表是线性结构中最常用而又最简单的一种数据结构。线性表由存储结构是否连续可分为顺序表和链表。顺序表指线性表中每个元素按顺序依次存储,线性表中逻辑上相邻的两个元素其在内存中的地址也是相邻的。而链表指的是每个数据元素存储不一定连续的一种数据结构,即链式存储。从内存中的分布来说,下一个元素的地址在与其相邻的上一个节点中存储,即链表每个节点的值由两部分组成,一部分是数据域,另一部分存一个引用(即指针,或者说是一个地址),指向该节点的下一个节点。

下面的代码是一个简单的顺序结构线性表的源代码,这个类部分实现了ArrayList的功能。



public class SequenceList<T> {
	private int DEFAULT_SIZE = 10;	//线性表中最大元素个数
	private int capacity;			//保存数组长度
	private Object[] elementData;
	private int size = 0;
	
	public SequenceList() {
		capacity = DEFAULT_SIZE;
		elementData = new Object[capacity];
	}
	
	//以初始化元素创建顺序线性表
	public SequenceList(int element) {
		this();
		elementData[0] = element;
		size++;
	}
	
	//以定长数组创建线性表
	public SequenceList(T element,int initSize) {
		capacity = 1;
		while(capacity < initSize) {
			capacity <<= 1;
		}
		elementData = new Object[capacity];
		elementData[0] = element;
		size++;
	}
	
	//获取线性表长度
	public int length() {
		return size;
	}
	
	//获取表中下标为i的元素值
	public T getData(int i) {
		if(i < 0 || i > size) {
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		return (T)elementData[i];
	}
	
	//顺序表的查找(查找索引)
	public int search(T data) {
		for(int i = 0;i < size;i++) {
			if(elementData[i] == data) {
				return i;
			}
		}
		System.out.println("Not found!!!");
		return -1;
	}
	
	//向线性表中下标为index的地方插入一个元素
	public void insert(T data,int index) {
		if(index < 0 || index >size) {
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		if(size > DEFAULT_SIZE) {
			System.out.println("顺序表中元素个数已达上限,不能再插入数据");
			return;
		}
		//插入操作
		System.arraycopy(elementData, index, elementData, index+1, size-index);
		elementData[index] = data;
		size++;
	}
	
	//在表的末尾插入元素
	public void addElement(T data) {
		insert(data,size);
	}
	//删除表中指定索引处的元素
	public void delete(int index) {
		if(index < 0 || index >size) {
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		T t = (T)elementData[index];
		int num = size-index-1;
		if(num > 0) {
			System.arraycopy(elementData, index+1, elementData, index, num);
		}
		size--;
		System.out.println("删除成功");
	}
	
	
	//判断表是否为空
	public boolean isEmpty() {
		return size == 0;
	}
	
	//清空线性表
	public void makeEmpty() {
		size = 0;
	}

}



测试代码:

public class Test {
	public static void main(String[] args) {
		SequenceList<String> stringList = new SequenceList<String>();
		
		stringList.addElement("111");
		stringList.addElement("222");
		stringList.addElement("444");
		
		stringList.insert("333", 2);
		
		for(int i=0;i<stringList.length();i++) {
			System.out.print(stringList.getData(i)+" ");
		}
		System.out.println();
		
		System.out.println("元素“111”在顺序表中的下标为 :"+stringList.search("111"));
	}
}


猜你喜欢

转载自blog.csdn.net/FelikZhang/article/details/79824637