public class LianShiBiaoShi<E> {
//这是一个内部类
private class Node<E> {
public E data;
public Node<E> next;
}
private Node firstnode = new Node();//做为表头,指向头节点
private int length = 0;
// 判断是否为空
public boolean listEmpty() {
return firstnode.next == null;
}
// 求表中的个数
public int length() {
return length;
}
// 返回第i个元素
public E getElem(int k) {
Node<E> temp = firstnode;
for (int i = 0; i <= k; i++) {
temp = temp.next;
}
return temp.data;
}
// 返回第一个elem的位子 如果不存在返回-1
public int locateElem(E elem) {
Node<E> temp = firstnode;
int cur = -1;
while (temp != null) {
E dt = temp.data;
if (elem.equals(dt)) {
return cur;
} else {
temp = temp.next;
cur++;
}
}
return -1;
}
// 返回前驱元素
public E priorElem(E elem) {
Node<E> temp = firstnode.next;
Node<E> pre = firstnode;
while (temp != null) {
E dt = temp.data;
if (elem.equals(dt)) {
return pre.data;
} else {
temp = temp.next;
pre = pre.next;
}
}
return null;
}
// 返回后继元素
public E nextElem(E elem) {
Node<E> temp = firstnode.next;
while (temp.next != null) {
if (elem.equals(temp.data)) {
temp = temp.next;
return temp.data;
} else {
temp = temp.next;
}
}
return null;
}
// 插入元素,在顺序连表最后插入
public void insertElem(E elem) {
Node<E> temp = firstnode;
Node<E> n = new Node<E>();
n.data = elem;
if (firstnode.next == null) {
firstnode.next = n;
} else {
while (temp.next != null) {
temp = temp.next;
}
temp.next = n;
}
length++;
}
// 在第i个元素之前插入元素
public void insertElem(int k, E elem) {
if (k >= length) {
throw new RuntimeException("你插入的元素超出范围!");
}
Node<E> temp = firstnode;
Node<E> n = new Node<E>();
n.data = elem;
for (int i = 0; i < k; i++) {
temp = temp.next;
}
n.next = temp.next;
temp.next = n;
length++;
}
// 删除第k个元素
public E deleteElem(int k) {
Node<E> temp = firstnode.next;
Node<E> pre = firstnode;
for (int i = 0; i < k; i++) {
temp = temp.next;
pre = pre.next;
}
pre.next = temp.next;
return temp.data;
}
public String toString() {
Node<E> temp = firstnode.next;
String s = "[";
while (temp.next != null) {
s = s + temp.data + ",";
temp = temp.next;
}
return s + temp.data + "]";
}
}
分享到:
相关推荐
线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据...
"线性表的链式表示和实现" 线性表是一种基本的数据结构,链式表示是线性表的一种常见的存储结构。在链式表示中,每个元素是一个独立的结点,结点中包含数据域和指针域,指针域指向下一个结点。链式表示的优点是可以...
用C语言编写数据结构 线性表的链式表示和实现
使用C++类模板实现了线性表的链式存储结构(链表),类中包含了线性表的常用方法:向线性表中插入一个元素、删除一个元素、清空线性表、获取一个元素、获取线性表长度等。大致实现了STL中的链表的基本功能,通过对比...
本实验报告详细介绍了线性表的链式存储结构,通过编程实践深入理解了链表的逻辑结构、基本操作以及链表算法的实现过程。 线性表作为一种常见的数据结构,其特点是元素之间存在一对一的线性关系。线性表中数据元素...
2. **理解并实现链式存储结构下的线性表**:设计算法实现求解动态单链表的长度及特定元素x的位置。 #### 实验内容 ##### 算法一:顺序表中插入元素 该部分的目标是在一个已经按递增顺序排列的线性表中插入一个...
在计算机科学中,线性表的实现方式有多种,其中链式存储结构是一种常见且灵活的方式。链式存储结构在线性表中通过节点(node)连接,每个节点包含一个数据元素和指向下一个节点的指针。 在提供的C++代码中,实现了...
在计算机科学中,线性表的实现通常有两种方式:顺序存储和链式存储。本篇文档主要关注的是链式存储的实现,特别是在C++语言中的应用。 链式存储的线性表是由一系列节点组成,每个节点包含两部分:数据域和指针域。...
本问题涉及的是链式存储的实现,具体是用C++语言编写线性表的链式表示,包括插入、删除等基本操作。 首先,链式存储结构是一种动态存储结构,它通过节点间的指针链接来表示元素之间的逻辑关系。在这个例子中,...
在计算机科学中,线性表的实现方式多种多样,其中链式存储是一种常见且灵活的方法,尤其适用于动态变化的数据集。本资料主要探讨的是用C语言实现线性表的链式存储。 链式存储与顺序存储相比,其最大优点在于它不...
本话题主要关注的是链式存储,特别是通过C语言来实现线性表的操作。 链式存储方式是线性表的一种灵活表示,它不依赖于数组的连续内存空间,而是通过指针链接各个节点,每个节点包含数据元素和指向下一个节点的指针...
线性表是由n(n>=0)个相同类型元素构成的有限序列,可以按照两种主要的方式进行实现:顺序结构和链式结构。本篇将详细讨论这两种实现方式,并结合C语言进行函数封装的实践。 1. **顺序结构**: 顺序结构的线性表...
由于要求使用栈和队列,而不是递归算法,这引入了两种不同的线性表实现方式。 栈是一种后进先出(LIFO)的数据结构,适合用于回溯操作。在这个问题中,栈用于保存当前路径,当找不到可行走的结点时,可以通过退栈...
线性表可以采用顺序存储或链式存储两种方式实现。本次实验主要关注的是顺序存储结构。 **顺序存储结构**的特点是使用一组地址连续的存储单元依次存放线性表的数据元素,同时可以通过数组下标直接访问元素,具有访问...
本实验报告主要围绕线性表的顺序存储和链式存储两种实现方式,以及它们在实际操作中的应用展开。实验的目的是使学生能够深入理解线性表的特性,熟练掌握在顺序表和单链表上执行基本操作的方法。 线性表的基本操作...
下面我们将深入探讨如何用C++通过类来实现链式线性表。 ### 链表类设计 1. **节点定义**:首先,我们需要一个节点类(Node)来存储数据和指向下一个节点的指针。通常,节点类包含两个成员:数据部分(data)和指向...