`

线形表-顺序表

 
阅读更多
public class ArrayList<E> {

	private E[] elementData;

	private int size;

	public ArrayList(int initialCapacity) {
		super();
		if (initialCapacity < 0)
			throw new IllegalArgumentException("Illegal Capacity: "
					+ initialCapacity);
		this.elementData = (E[]) new Object[initialCapacity];
	}

	public ArrayList() {
		this(10);
	}

	public void ensureCapacity(int minCapacity) {
		int oldCapacity = elementData.length;
		if (minCapacity > oldCapacity) {
			Object oldData[] = elementData;
			int newCapacity = (oldCapacity * 3) / 2 + 1;
			if (newCapacity < minCapacity)
				newCapacity = minCapacity;
			elementData = (E[]) new Object[newCapacity];
			System.arraycopy(oldData, 0, elementData, 0, size);
		}
	}

	public int size() {
		return size;
	}

	public boolean isEmpty() {
		return size == 0;
	}

	public boolean contains(Object elem) {
		return indexOf(elem) >= 0;
	}

	public int indexOf(Object elem) {
		if (elem == null) {
			for (int i = 0; i < size; i++)
				if (elementData[i] == null)
					return i;
		} else {
			for (int i = 0; i < size; i++)
				if (elem.equals(elementData[i]))
					return i;
		}
		return -1;
	}

	public int lastIndexOf(Object elem) {
		if (elem == null) {
			for (int i = size - 1; i >= 0; i--)
				if (elementData[i] == null)
					return i;
		} else {
			for (int i = size - 1; i >= 0; i--)
				if (elem.equals(elementData[i]))
					return i;
		}
		return -1;
	}

	public E get(int index) {
		RangeCheck(index);
		return elementData[index];
	}

	public E set(int index, E element) {
		RangeCheck(index);
		E oldValue = elementData[index];
		elementData[index] = element;
		return oldValue;
	}

	public boolean add(E o) {
		ensureCapacity(size + 1);
		elementData[size++] = o;
		return true;
	}

	public void add(int index, E element) {
		if (index > size || index < 0)
			throw new IndexOutOfBoundsException("Index: " + index + ", Size: "
					+ size);

		ensureCapacity(size + 1);
		System.arraycopy(elementData, index, elementData, index + 1, size
				- index);
		elementData[index] = element;
		size++;
	}

	public E remove(int index) {
		RangeCheck(index);

		E oldValue = elementData[index];

		int numMoved = size - index - 1;
		if (numMoved > 0)
			System.arraycopy(elementData, index + 1, elementData, index,
					numMoved);
		elementData[--size] = null; // Let gc do its work

		return oldValue;
	}

	public boolean remove(Object o) {
		if (o == null) {
			for (int index = 0; index < size; index++)
				if (elementData[index] == null) {
					fastRemove(index);
					return true;
				}
		} else {
			for (int index = 0; index < size; index++)
				if (o.equals(elementData[index])) {
					fastRemove(index);
					return true;
				}
		}
		return false;
	}

	private void fastRemove(int index) {
		int numMoved = size - index - 1;
		if (numMoved > 0)
			System.arraycopy(elementData, index + 1, elementData, index,
					numMoved);
		elementData[--size] = null; 
	}

	public void clear() {
		for (int i = 0; i < size; i++)
			elementData[i] = null;
		size = 0;
	}

	protected void removeRange(int fromIndex, int toIndex) {
		int numMoved = size - toIndex;
		System
				.arraycopy(elementData, toIndex, elementData, fromIndex,
						numMoved);
		int newSize = size - (toIndex - fromIndex);
		while (size != newSize)
			elementData[--size] = null;
	}

	private void RangeCheck(int index) {
		if (index >= size)
			throw new IndexOutOfBoundsException("Index: " + index + ", Size: "
					+ size);
	}

}
分享到:
评论

相关推荐

    严版线形表实现含部分课后习题

    线形表是数据结构中的基础概念,它是一种线性组织数据的方式,包括顺序表和链表两种主要形式。在这个“严版线形表实现含部分课后习题”项目中,我们关注的是在VC++6.0环境下如何实现这两种线形表的数据结构,并解决...

    c#编写的线形表基本操作的程序

    线形表的主要特点是以线性的顺序存储元素,即每个元素有一个前驱和一个后继(对于第一个元素,前驱是空;对于最后一个元素,后继是空)。这种结构使得线形表的操作相对简单和直观。 1. **创建线形表**:在C#中,...

    数据结构顺序表实验报告.pdf

    顺序表是线形表的一种,它的逻辑结构特征是:元素之间的关系是一对一的关系,每个元素都有其唯一的索引。 二、顺序表的逻辑结构特征 顺序表的逻辑结构特征包括: * 元素之间是一对一的关系 * 每个元素都有其唯一...

    数据库基础知识线形表.doc

    线形表是一种线性的数据组织形式,其中的元素按照特定的顺序排列,每个元素都有一个唯一的索引或位置。线形表可以是动态的,允许在表的任何位置插入或删除元素,也可以是静态的,一旦创建就不能改变大小。 数据结构...

    数据库基础知识-线形表.doc

    数据结构基础知识-线形表 数据结构是一门核心课程,介于数学、电脑硬件和电脑软件三者之间。它随着电脑的产生和发展而发展起来,旨在解决问题选择出一种好的数据结构和设计一个好的算法。数据结构的基本概念包括...

    数据结构实验一顺序表的实现.doc

    数据结构实验一顺序表的实现 数据结构实验是一种基本的数据结构实验,它是计算机科学和信息技术专业学生的基础实验。顺序表是数据结构中的一个基本结构,它是一种线性表,元素在内存中连续存储。顺序表的实现是数据...

    线性结构线形表栈和队列PPT学习教案.pptx

    线性结构中的线形表,包括栈和队列,是数据结构的基础概念,它们在计算机科学和编程中扮演着重要角色。线性表是数据的一种有序存储方式,而栈和队列则是线性表的特殊形式,具有特定的访问规则。 栈是一种后进先出...

    数据结构 C语言版第二章 线形表.ppt

    顺序表的优点是访问速度快,因为元素的物理位置与逻辑位置一致。然而,插入和删除操作可能涉及大量的元素移动,效率较低。 2. **链式存储结构**包括单链表、循环链表和双向链表。这些结构通过链接元素来保存顺序,...

    数据结构笔记精华.docx

    * 线形表的类型定义:线形表是一种基本的数据结构,分为顺序表和链式表两种。 * 线形表的顺序表示和实现:顺序表是将数据元素存储在连续的内存空间中,通过索引来访问元素。 * 线形表的链式表示和实现:链式表是将...

    数据结构-线性表的实现

    printf("*********************顺序表****************************"); printf("\n"); SequenceList(); printf("\n\n\n"); printf("*********************单链表****************************"); printf...

    课程设计 - 数据结构 -112,113,115班题目要求

    2. **掌握顺序表的基本操作**:熟悉顺序表的各种基本操作。 3. **掌握串的基本操作**:熟练使用字符串进行各种操作。 #### 设计内容和要求 - **建立两个字符串String1和String2**:创建两个不同的字符串。 - **将...

    清华大学2005计算机专业课试题(回忆版)

    线形表可以采用顺序存储结构(数组)或链式存储结构(链表)。 2. **存储结构的选择**:选择存储结构取决于具体需求。顺序存储结构适用于元素数量确定且便于随机访问,而链式存储结构适用于元素数量不确定或频繁...

    数据结构练习题

    - A、顺序表:顺序表不适合递归调用,因为它没有特定的数据结构支持递归调用的回溯过程。 - B、线形链表:线性链表同样不支持递归调用所需的特定结构。 - C、堆栈:递归调用过程中会不断创建新的函数调用记录,...

    仪表资料-第十章 集散控制系统.doc

    1. 网络结构:如星形、环形、总线形等。 2. 信道访问:控制数据包在共享信道上的传输方式。 3. 通信协议:定义数据交换的规则和格式。 4. 信号发送技术:保证信号的准确传输。 5. 传输介质:如双绞线、光纤等。 6. ...

    小区二期楼机械土方开挖工程技术交底记录.doc

    - 对于临时性挖方边坡,其坡度应根据地质条件、边坡高度和土体稳定性确定,如表-2所示。 - 当挖方经过不同土层或深度较大时,边坡可设计成折线形或台阶形,以保证稳定性。 - 开挖顺序和路线的确定至关重要,以...

    数据结构(c 语言版)

    线形表是最基本的数据结构之一,包括顺序表和链表。顺序表是在内存中连续存储的一组元素,可以通过下标快速访问。链表则由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表允许在任意位置插入和删除...

    4 数据结构第二章知识点-3.doc

    数据结构第二章知识点 本章节主要介绍了线形表的存储结构,包括循环单链表、双链表和静态链表等。下面是本章节的知识点总结: 知识点 1:循环单链表从任意一个结点...顺序表的存储密度是 1,而链表的存储密度小于 1。

    合工大1999年《数据结构》考研真题.pdf

    - 第1题:虽然通常数组存储的线性表确实是顺序表,但不能说用数组存储的线形表一定是顺序表,因为还存在其他可能性,比如数组还可以用于实现栈、队列等数据结构。**错误**。 - 第2题:队列是一种允许在一端(队尾...

    887数据结构与算法分析.doc

    线形表是一种线性排列的数据元素集合,包括顺序表和链表。顺序表在内存中连续存储,操作简便但插入删除可能涉及大量元素移动;链表则通过指针连接元素,插入删除更灵活但需额外空间。 栈和队列是两种特殊的数据结构...

    初旭的《算法与数据结构》笔记-PKU1

    顺序表是将线形表中的元素一个一个存储到一片相邻的区域中。单链表是线形表中的接点通过指针链接成为链表。静态链表是链表中的接点在编译时就已经确定了其存储位置。 字符串部分介绍了字符串的基本概念、定长顺序串...

Global site tag (gtag.js) - Google Analytics