开发环境:Eclipse
参考书籍:《数据结构》——清华大学出版社——殷人昆
LinkedList.h
/*
* LinkedList.h
*
* Created on: Jun 6, 2010
* Author: limx
*/
#ifndef LINKEDLIST_H_
#define LINKEDLIST_H_
#include<iostream.h>
template<class T>
struct Node {
T data;
Node<T> *next;
Node(Node<T> * ptr = NULL) {
next = ptr;
}
Node(const T& item, Node<T>*ptr = NULL) {
data = item;
next = ptr;
}
};
template<class T>
class LinkedList {
private:
Node<T> *head;
Node<T> *tail;
int size;
public:
LinkedList() {
head = tail = new Node<T> ;
size = 0;
}
LinkedList(const T& x) {
head = tail = new LinkedList<T> (x);
size = 0;
}
bool insert(T& x);
bool remove(T & x);
Node<T> * locate(int i);
bool remove(int i, T & x);
int getSize() const;
void output();
virtual ~LinkedList();
};
#endif /* LINKEDLIST_H_ */
LinkedList.cpp
/*
* LinkedList.cpp
*
* Created on: Jun 6, 2010
* Author: limx
*/
#include "LinkedList.h"
//插入值为x的节点
template<class T>
bool LinkedList<T>::insert(T& x) {
// here must add an "*"
Node<T> *newNode = new Node<T> (x);
if (newNode == NULL) {
cerr << "memory error!" << endl;
exit(1);
}
newNode->next = tail->next;
tail->next = newNode;
tail = newNode;
size++;
return true;
}
//获得链表的元素个数
template<class T>
int LinkedList<T>::getSize() const {
return size;
}
//删除值为x的链表元素
template<class T>
bool LinkedList<T>::remove(T & x) {
Node<T>* current = head;
Node<T>* del = NULL;
while (current != NULL && current->next->data != x) {
current = current->next;
}
del = current->next;
current->next = del->next;
delete del;
size--;
return true;
}
//定位到第i个链表元素,并返回元素的地址
template<class T>
Node<T> * LinkedList<T>::locate(int i) {
/*if(i<0||i>length){
return NULL;
}*/
if (i < 0) {
return NULL;
}
Node<T> * current = head;
int count = 0;
while (current != NULL && count < i) {
current = current->next;
count++;
}
return current;
}
//删除第i个节点
template<class T>
bool LinkedList<T>::remove(int i, T & x) {
//这个处理的很巧妙
Node<T> *current = this->locate(i - 1);
if (current == NULL || current->next == NULL) {
return false;
}
Node<T>* del = current->next;
current->next = del->next;
x = del->data;
delete del;
size--;
return true;
}
template<class T>
void LinkedList<T>::output() {
Node<T> * current = head->next;
int i = 0;
cout << "the elements in the LinkedList are:" << endl;
while (current != NULL) {
cout << "#" << ++i << "#:" << current->data << endl;
current = current->next;
}
}
template<class T>
LinkedList<T>::~LinkedList() {
// TODO Auto-generated destructor stub
}
main.cpp
/*
* main.cpp
*
* Created on: Jun 6, 2010
* Author: limx
*/
#include<iostream.h>
#include"LinkedList.cpp"
int main() {
LinkedList<int> ll;
int data;
cout << "enter the element :" << endl;
for (int i = 0; i < 5; i++) {
cout << "#" << i + 1 << "#";
cin >> data;
ll.insert(data);
}
ll.output();
int i;
int x;
cout << "which value you want to delete :" << endl;
cin >> x;
cout << "the value to delete is " << x << endl;
ll.remove(x);
ll.output();
cout << "enter the location you want to delete:" << endl;
cin >> i;
if (ll.remove(i, x) == true) {
cout << "the value of element to delete is: " << x << endl;
}
ll.output();
cout << "the size of LinkedList are:" << ll.getSize();
return 0;
}
result:
enter the element :
#1#12
#2#30
#3#35
#4#16
#5#40
the elements in the LinkedList are:
#1#:12
#2#:30
#3#:35
#4#:16
#5#:40
which value you want to delete :
12
the value to delete is 12
the elements in the LinkedList are:
#1#:30
#2#:35
#3#:16
#4#:40
enter the location you want to delete:
2
the value of element to delete is: 35
the elements in the LinkedList are:
#1#:30
#2#:16
#3#:40
the size of LinkedList are:3
分享到:
相关推荐
链式线性表是一种常见的数据结构,用于存储和操作序列数据。在C语言中,它通常通过结构体来实现,每个节点包含一个数据元素和一个指向下一个节点的指针。对于给定的问题“求链式线性表的倒数第K项”,我们需要设计一...
### 8579 链式线性表的基本操作 #### 一、链式线性表概述 链式线性表是一种常见的数据结构,在计算机科学中被广泛应用于存储和处理一系列元素。与顺序表不同,链式线性表通过指针链接的方式实现元素之间的逻辑顺序...
实现链式线性表的增加删除 输出时排除后在输出 是学习数据结构必须的资料
链式线性表是一种常见的数据结构,它在内存中不连续存储元素,而是通过节点间的指针连接元素。在C++中,我们可以使用类来抽象地表示这种数据结构,这通常被称为链表类。下面我们将深入探讨如何用C++通过类来实现链式...
链式线性表是一种数据结构,它在计算机科学中被广泛使用,特别是在处理大量有序或无序数据时。与顺序数组不同,链式线性表的元素不是在内存中的连续位置存储,而是通过链接节点来表示元素之间的关系。每个节点包含...
在数据结构领域,我们通常会根据存储方式的不同将其分为两种主要类型:顺序线性表和链式线性表。 **顺序线性表**是一种在内存中连续存储的数据结构,每个元素都有一个唯一的索引位置,索引从0开始。例如,如果一个...
### 数据结构:链式线性表逆置 在计算机科学领域,数据结构是研究如何组织、管理和存储数据的一门重要学科。其中,链式线性表(简称链表)是一种常见的线性数据结构,它通过指针将一组任意存储位置的元素连接起来,...
1. 可扩展:可中间、尾部新增记录; 2. 可删除数据:可删除指定学号的数据; 3. 可统计:可统计链表中的记录数量、平均成绩、最低、最高成绩(每次增减数据后,统计一次) 4. 可查询:可查询某个学号对应的相关...
### C++逆序创建链式线性表知识点详解 #### 1. 概述 本文主要介绍了如何使用C++编程语言实现逆序创建链式线性表的过程,并详细阐述了链表的基本操作如输入、输出、插入和删除等功能。逆序创建链式线性表是一种特殊...
### C++顺序创建链式线性表知识点解析 #### 一、概述 本文将详细介绍如何使用C++编程语言实现一个链式线性表的操作,包括创建、输入、输出、插入和删除等功能。链式线性表是一种常见的数据结构,通过一系列的节点...
带头结点的单向链式线性表,实现遍历,插入,删除,按序插入,清空
实验中,链式线性表可能使用单链表或双向链表实现。相关功能与顺序存储结构类似,包括销毁、清空和判断线性表是否为空等操作,但在链表中,这些操作的实现方式与顺序存储有所不同,例如销毁链表需要遍历并释放每个...
链式存储结构线性表的java实现,全代码注释,通俗易懂
链式线性表与顺序存储相比,其优点在于它不需要预先分配连续的内存空间,而是通过节点间的指针链接来构造数据结构。这种实现方式使得插入和删除操作更为灵活,因为它们只需要改变相邻节点的指针即可,而不需要移动...
带头节点的线性表的链式存储实现,实现了带头节点链表的创建,不同功能的插入操作,按位置插入,头插入尾插入。也有按数据,按位置删除链表的功能。压缩包中有可执行文件,也有makefile,在linux下直接make即可生成...
顺序线性表是指使用数组来存储线性表的元素,而链式线性表则使用链表来存储元素。 链式线性表 链式线性表是线性表的一种实现方式,它使用链表来存储元素。链表是一种动态分配的数据结构,每个节点包含一个数据元素...
链式线性表由一系列节点组成,每个节点包含两部分:数据元素和指向下一个节点的指针。这种结构允许节点在内存中不连续存放,使得插入和删除操作相对于顺序表更加高效,因为它们只需要改变指针的链接关系,而无需移动...