package test;
import java.util.*;
public class Tiger9 {
static class LinkedList {
private Node header;
private int size;
public LinkedList() {
header = new Node(null, null);
size = 0;
}
public void add(Object o) {
Node n = new Node(o, header); //关键步骤。创建一个新的Node对象,它的next变量将指向添加它之前的header对象。
header = n; //使新创建的Node对象成为新的header对象。
size++;
}
public Object remove() {
Object o = header.object;
header = header.next;
size--;
return o;
}
public Object get(int index) {
if (index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException("index = " + index);
}
Node n = header;
for (int i = 0; i < index; i++) {
n = n.next;
}
return n.object;
}
public Object[] toArray() {
Object[] os = new Object[size];
int i = 0;
for (Node n = header; n.next != null; n = n.next) {
os[i++] = n.object;
}
return os;
}
public int size() {
return size;
}
public String toString() {
return Arrays.toString(toArray());
}
private class Node {
Object object;
Node next;
public Node(Object object, Node next) {
this.object = object;
this.next = next;
}
}
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("aaaa");
list.add("bbbb");
list.add("cccc");
list.add("dddd");
System.out.println(list + " " + list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println("i=" + i + ", object=" + list.get(i));
}
for (int i = 0; i < 4; i++) {
System.out.println("remove:" + list.remove() + ", " + list);
}
}
}
结果:
[dddd, cccc, bbbb, aaaa] 4
i=0, object=dddd
i=1, object=cccc
i=2, object=bbbb
i=3, object=aaaa
remove:dddd, [cccc, bbbb, aaaa]
remove:cccc, [bbbb, aaaa]
remove:bbbb, [aaaa]
remove:aaaa, []
结论:
一、对于链表来说,添加和删除元素是非常容易的。相比而言,在线性表中每添加或删除一个元素,就得创建一个新size的数组,并将原有元素拷贝到新数组中来。
二、另一方面,在线性表中,由于使用数组作为存取元素的仓库,按索引查找是非常容易实现的。相对而言,在链表中必须经历低效率的频繁遍历才能索引到相应位置的元素。
三、应当根据具体情况分别选用相应的数据结构。比如:
如果只需要快速添加元素并通过遍历方式依次访问元素,并不涉及到索引操作,推荐使用链表。
如果需要频繁地根据索引随机访问元素,则虽然在添加和删除操作上先天不足,但线性表的性能仍会优于链表。
分享到:
相关推荐
C语言数据结构双向链表简单实例 本文主要介绍了C语言数据结构双向链表简单实例的相关知识点,包括双向链表的基本操作、删除元素、插入元素、判断对称性、排序等。 一、双向链表的基本操作 双向链表是一种数据结构...
本实例将深入探讨链表的基本概念、操作以及如何通过C语言实现一个简单的链表。 链表由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,而指针域则指向下一个节点的地址。在单链表中...
### Linux内核双向链表简单分析 #### 链表数据结构简介 链表作为一种基本且重要的数据结构,在操作系统及各种软件系统中扮演着至关重要的角色。尤其在Linux内核中,链表更是广泛应用于内存管理、进程调度、文件...
本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要理解链表的基本概念。链表不同于数组,它不连续存储元素,每个元素(称为节点)包含数据以及指向下一个...
一个c++链表完整例子,包括了有关于链表的所有基本操作的实现,简单易懂!
下面我们将深入探讨链表的概念、特点以及如何在C语言中实现一个简单的链表。 首先,数据结构是组织和存储数据的方式,它可以包含数据的静态属性(如变量)和动态行为(如函数)。算法则是解决问题的方法,涉及如何...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。链表与数组不同,它不依赖于...这些代码实例可以帮助你更好地理解链表的工作原理,并为你的编程技能打下坚实的基础。
在这个"图书管理"实例中,我们可能会使用单链表,因为它的实现相对简单。 链表操作主要包括以下几种: 1. 插入节点:在链表的特定位置插入新的节点。这需要找到插入位置的前一个节点,然后更新其指针指向新节点,...
### C语言链表编程实例知识点详解 #### 1. 链表基础 链表是由一系列节点组成的集合,每个节点由数据部分和指向下一个节点的指针构成。链表的节点结构体定义如下: ```c typedef struct LNode { int data; // ...
总的来说,这个简单的链表实例将帮助我们了解链表的基本工作原理,包括节点结构、插入、删除、遍历和查找等操作。熟悉这些基本概念后,我们可以进一步探索更复杂的数据结构,如双向链表、循环链表以及各种链表操作的...
C语言数据结构链表的实例(十九种操作) 在计算机科学中,数据结构是指计算机中存储、组织和管理数据的方式。链表是一种基本的数据结构,广泛应用于计算机科学和软件开发中。今天,我们将讨论C语言中的数据结构链表...
详细解释了链表的基本操作,附有实例代码! +《链表——>小阿豪带你写链表》!!!!进入正文 1.首先,先想好自己要创建的链表格式以及最后的的显示界面!!! 2.主函数尽量放到后面写,前面写功能函数,在调用...
创建一个简单的链表,包含整数并进行遍历: ```csharp using System; using System.Collections.Generic; class Program { static void Main() { LinkedList<int> list = new LinkedList(); list.AddLast(1...
1. **创建链表**:创建一个新的LinkedList实例,初始化为空链表。 ```csharp LinkedList<int> list = new LinkedList(); ``` 2. **添加节点**:在链表的头部或尾部插入新节点。 - 在头部插入: ```csharp list....
通过上述类实现,我们可以创建一个链表实例,然后向链表中添加元素: ```python linked_list = LinkedList() linked_list.insert_at_end(1) linked_list.insert_at_end(2) linked_list.insert_at_end(3) linked_...
本文将详细讲解如何在Delphi环境中创建一个自定义链表实例,以及其背后的原理和操作。 首先,理解链表的基本概念非常重要。链表不同于数组,它不是一块连续的内存空间,而是由一系列节点组成,每个节点包含数据和...
在Linux系统中,数据...通过学习提供的`linux下链表简单实用方法`文件,你将能够看到这些操作的实际代码示例,进一步加深理解。记住,实践是最好的老师,尝试编写和调试自己的链表代码,以便更好地掌握这个重要概念。
本文介绍了一个简单的循环链表的应用实例,包括如何在指定位置插入和删除节点。通过具体的代码示例,展示了如何实现这些基本操作,并通过输入验证等手段提高了程序的安全性和稳定性。对于学习C语言和数据结构的初学...
下面是一个简单的链表节点定义和操作的例子: ```cpp #include struct Node { int data; // 节点数据 Node* next; // 指向下一个节点的指针 }; // 创建新节点 Node* createNode(int data) { Node* newNode = ...