数组线性表的add(int index,Object o)和remove(int index)方法的效率很低,因为这两个方法需要移动潜在的大量元素。为提高在表中特意位置添加和删除元素的效率,可以采用链式结构来实现线性表。
MyLinkedList是使用链式结构实现的动态线性表,它扩展了MyAbstractList类。此外,它还提供addFirst、addLast、removeFirst、removeLast、getFirst和getLast方法,如下图
实现MyLinkedList
实现addFirst(e)方法
addFirst(e)方法创建一个包含元素e的新结点。该新结点就成为链表的第一个结点。该方法可以如下实现:
public void addFirst(E e) {
Node<E> newNode = new Node<E>(e);
newNode.next = head;
head = newNode;
size++;
if(tail == null) rail = head;
}
实现addLast(e)方法
addLast(e)方法创建一个包含元素的新结点,并将它插到链表的末尾。该方法可以如下实现:
public void addLast(E e) {
Node<E> newNode = new Node<E>(e);
if(tail == null) {
head = tail = newNode;
}
else {
tail.next = newNode;
tail = tail.next;
}
size++;
}
实现add(index,e)方法
add(index,e)方法将一个元素插入到链表的指定下标处。该方法可以如下实现:
public void add(int index, E e) {
if(index == 0) addFirst(e);
else if (index >= size) addLast(e);
else {
Node<E> Current = head;
for(int i =1; i< index; i++) current = current.next;
Node<E> temp = current.next;
currrent.next = new Node<E>(e);
size++;
}
}
实现removeFirst()方法
removeFirst()方法从链表中删除第一个元素。该方法可以如下实现:
public E removeFirst () {
if (size == 0) retrun null;
else if (size == 1){
Node<E> temp = head;
head = tail = null;
size = 0;
return temp.element;
}
else{
Node<E> current = head;
head = (head.next).next;
size--;
return current.element;
}
}
实现removeLast()方法
removeLast()方法从链表中移走最后一个元素。该方法可以如下实现:
public E removeLast() {
if (size == 0) return null;
else if (size == 1) {
Node<E> temp = head;
head = tail = null;
size = 0;
rerurn temp.element;
}
else{
Node<E> current = head;
for(int i= 0; i < size -2; i++) current = current.next;
Node<E> temp = tail;
tail = current;
tail.next = null;
size --;
rerurn temp.elelment;
}
}
实现removo(index)方法
remove(index)方法找到指定下标处的结点,然后将它删除。该方法可以如下实现:
public E remove(int index) {
if(index < 0 || index >= size) return null;
else if (index == 0) return removeFirst();
else if (index == size -1) return removeLast();
else {
Node<E> previous = head;
for(int i = 1; i < index; i++) {
previous = previous.next;
}
Node<E> current = previous.next;
previous.next = current.next;
size--;
return current.element;
}
}
分享到:
相关推荐
数据结构实现C++线性链表,实现增删改查基本方法
线性链表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在处理大量数据时。线性链表的逻辑结构与数组不同,数组在内存中是连续存储的,而链表则允许数据元素(节点)在内存中分散存储。这种特性...
### 线性链表查询算法 #### 一、引言 在计算机科学中,数据结构与算法是解决实际问题的基础。线性链表作为一种基本的数据结构,在许多场景下都有广泛的应用。对于线性链表而言,其核心操作包括插入、删除以及查询...
在计算机科学中,数据结构是组织和管理大量数据的关键元素,而线性链表作为其中的一种基础数据结构,被广泛应用于各种算法和程序设计中。本课程设计主要围绕单链表进行,涵盖了单链表的基本操作,包括创建、删除、...
### 线性链表的实现 #### 一、引言 线性链表是一种常见的线性表存储结构,它通过一系列的节点来表示数据之间的逻辑关系,每个节点包含两个部分:一部分存放节点所代表的信息(即数据域),另一部分存放指向下一个...
### 知识点:线性链表逆置 #### 一、线性链表简介 线性链表是一种常见的数据结构,它通过一系列节点来表示数据元素,每个节点包含两部分:一部分存储数据元素(本例中为`ElemType int`),另一部分是链接到下一个...
线性链表是一种基本的数据结构,它由一系列节点(或称为元素)组成,每个节点包含一个数据元素和指向下一个节点的指针。本篇文档主要介绍了如何在C语言中实现线性链表的插入和删除操作,通过两个不同的程序进行展示...
线性链表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在处理动态数据集合时。线性链表与数组不同,不连续存储数据,而是通过节点间的引用(指针)链接数据元素。本项目提供的源程序实现了线性...
线性链表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在处理动态数据集合时。相较于数组,链表允许我们在不预先知道数据规模的情况下进行高效的插入和删除操作。这里我们将深入探讨线性链表的...
### 线性链表的实现(C语言) 在计算机科学中,链表是一种常见的数据结构,用于存储一系列元素。每个元素(称为节点)包含一个数据字段和一个指向列表中下一个节点的链接。线性链表是其中最基本的形式,本文将深入...
一个集合线性链表插入查找删除等功能的源代码,适合初学者自学与理解,这是我自己写的上交作业
关于线性链表的基本代码。静态函数啊结点啊什么的都有,看看就明白。
线性链表是一种基本的数据结构,它在计算机科学中被广泛用于存储和处理动态数据集。与数组不同,链表的元素不需在内存中连续存放,而是通过指针链接在一起,这使得链表在插入和删除操作上具有较高的灵活性。在本主题...
#### 一、线性链表与单链表概念解析 - **线性链表**:是一种基本的数据结构类型,属于线性表的一种存储方式。线性表是由n个元素组成的有限序列,每个元素都有一个直接前驱和一个直接后继,除了第一个元素没有直接...
《线性链表详解》 线性链表是一种在计算机科学中常见的数据结构,它以链式存储方式来实现线性表。线性链表主要包括单链表、双向链表、单循环链表和双向循环链表等类型,其中单链表是最基础的一种。 单链表是由一组...
带表头结点(存放的是该线性链表的长度),结点存放的是整型数值; 实现以下操作 : 置空MakeEmpty() 求长度Length() 插入Insert(int x,int i): 将x插入到第i个结点(不含头结点)的之后 ...
根据给定文件的信息,本文将详细解析如何实现一个线性链表的逆置操作,并对提供的代码进行解读和分析。 ### 线性链表逆置的概念 在计算机科学中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据...
### 创建线性链表 #### 知识点概述 本文将详细介绍如何在C语言中创建一个线性链表。线性链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据元素以及指向下一个节点的指针。线性链表在实际应用中非常...
线性链表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在处理动态数据集合时。线性链表与数组不同,不连续存储数据,而是通过节点间的指针链接来表示数据序列。本资料"shujujiegou.rar_线性链表_...