`
lovelimx
  • 浏览: 20515 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

链式线性表

阅读更多

开发环境: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
 
分享到:
评论

相关推荐

    求链式线性表的倒数第K项_C语言_K._

    链式线性表是一种常见的数据结构,用于存储和操作序列数据。在C语言中,它通常通过结构体来实现,每个节点包含一个数据元素和一个指向下一个节点的指针。对于给定的问题“求链式线性表的倒数第K项”,我们需要设计一...

    8579 链式线性表的基本操作

    ### 8579 链式线性表的基本操作 #### 一、链式线性表概述 链式线性表是一种常见的数据结构,在计算机科学中被广泛应用于存储和处理一系列元素。与顺序表不同,链式线性表通过指针链接的方式实现元素之间的逻辑顺序...

    链式线性表的增加删除排序

    实现链式线性表的增加删除 输出时排除后在输出 是学习数据结构必须的资料

    C++ 链式线性表 类方式实现

    链式线性表是一种常见的数据结构,它在内存中不连续存储元素,而是通过节点间的指针连接元素。在C++中,我们可以使用类来抽象地表示这种数据结构,这通常被称为链表类。下面我们将深入探讨如何用C++通过类来实现链式...

    链式线性表实现

    链式线性表是一种数据结构,它在计算机科学中被广泛使用,特别是在处理大量有序或无序数据时。与顺序数组不同,链式线性表的元素不是在内存中的连续位置存储,而是通过链接节点来表示元素之间的关系。每个节点包含...

    数据结构链式线性表以及顺序线性表

    在数据结构领域,我们通常会根据存储方式的不同将其分为两种主要类型:顺序线性表和链式线性表。 **顺序线性表**是一种在内存中连续存储的数据结构,每个元素都有一个唯一的索引位置,索引从0开始。例如,如果一个...

    数据结构 链式线性表逆置

    ### 数据结构:链式线性表逆置 在计算机科学领域,数据结构是研究如何组织、管理和存储数据的一门重要学科。其中,链式线性表(简称链表)是一种常见的线性数据结构,它通过指针将一组任意存储位置的元素连接起来,...

    链式线性表的建立、插入及删除

    1. 可扩展:可中间、尾部新增记录; 2. 可删除数据:可删除指定学号的数据; 3. 可统计:可统计链表中的记录数量、平均成绩、最低、最高成绩(每次增减数据后,统计一次) 4. 可查询:可查询某个学号对应的相关...

    C++逆序创建链式线性表

    ### C++逆序创建链式线性表知识点详解 #### 1. 概述 本文主要介绍了如何使用C++编程语言实现逆序创建链式线性表的过程,并详细阐述了链表的基本操作如输入、输出、插入和删除等功能。逆序创建链式线性表是一种特殊...

    C++顺序创建链式线性表

    ### C++顺序创建链式线性表知识点解析 #### 一、概述 本文将详细介绍如何使用C++编程语言实现一个链式线性表的操作,包括创建、输入、输出、插入和删除等功能。链式线性表是一种常见的数据结构,通过一系列的节点...

    带头结点的单向链式线性表

    带头结点的单向链式线性表,实现遍历,插入,删除,按序插入,清空

    实验报告(链式线性表)1

    实验中,链式线性表可能使用单链表或双向链表实现。相关功能与顺序存储结构类似,包括销毁、清空和判断线性表是否为空等操作,但在链表中,这些操作的实现方式与顺序存储有所不同,例如销毁链表需要遍历并释放每个...

    链式线性表的java实现

    链式存储结构线性表的java实现,全代码注释,通俗易懂

    线性表的链式实现

    链式线性表与顺序存储相比,其优点在于它不需要预先分配连续的内存空间,而是通过节点间的指针链接来构造数据结构。这种实现方式使得插入和删除操作更为灵活,因为它们只需要改变相邻节点的指针即可,而不需要移动...

    带头节点的链式存储线性表

    带头节点的线性表的链式存储实现,实现了带头节点链表的创建,不同功能的插入操作,按位置插入,头插入尾插入。也有按数据,按位置删除链表的功能。压缩包中有可执行文件,也有makefile,在linux下直接make即可生成...

    线性表的就地逆置

    顺序线性表是指使用数组来存储线性表的元素,而链式线性表则使用链表来存储元素。 链式线性表 链式线性表是线性表的一种实现方式,它使用链表来存储元素。链表是一种动态分配的数据结构,每个节点包含一个数据元素...

    xianxingbiao.rar_线性表_线性表实习

    链式线性表由一系列节点组成,每个节点包含两部分:数据元素和指向下一个节点的指针。这种结构允许节点在内存中不连续存放,使得插入和删除操作相对于顺序表更加高效,因为它们只需要改变指针的链接关系,而无需移动...

Global site tag (gtag.js) - Google Analytics