/*节点Node的相关声明与定义*/
//Node.h
#include<iostream>
using namespace std;
template<typename T>
class Node
{
public:
Node();
Node(T data);
~Node();
void setData(T data);
T getData();
void setNext(Node<T>*next);
Node* getNext();
void printData();
private:
T *m_tpData;
Node<T> *m_tpNext;
};
template<typename T>
Node<T>::Node()
{
m_tpData = new T;
m_tpNext = NULL;
}
template<typename T>
Node<T>::~Node()
{
delete m_tpData;
m_tpNext = NULL;
}
template<typename T>
void Node<T>::setData(T data)
{
*m_tpData = data;
}
template<typename T>
T Node<T>::getData()
{
return *m_tpData;
}
template<typename T>
void Node<T>::setNext(Node<T> *next)
{
m_tpNext = next;
}
template<typename T>
Node<T>*Node<T>::getNext()
{
return m_tpNext;
}
template<typename T>
void Node<T>::printData()
{
cout << *m_tpData << endl;
}
/*链表中相关功能的函数的定义与实现*/
//LinkList.h
#include<iostream>
#include "Node.h"
using namespace std; template<typename T>
class LinkList
{
public:
LinkList();
~LinkList();
bool isListEmpty();
bool clearList();
int getListLength();
int getElemIndex(T &elem);
bool getListElem(int index, T* elem);
bool ListInsert(int index, T &elem);
bool ListDelete(int index, T *elem);
void ListPrint(void);
private:
Node<T> *m_pList;
int m_iLength;
};
template<typename T>
LinkList<T>::LinkList()
{
m_pList = new Node<T>;
m_pList->setData(NULL);
m_pList->setNext(NULL);
m_iLength = ;
}
template<typename T>
LinkList<T>::~LinkList()
{
Node<T>*nextNode = m_pList;
while (nextNode->getNext() != NULL)
{
nextNode = m_pList->getNext();
delete m_pList;
m_pList = nextNode;
}
delete m_pList;//delete last Node
m_pList = NULL;
}
template<typename T>
bool LinkList<T>::isListEmpty()
{
if (m_iLength == )
{
return true;
}
return false;
}
template<typename T>
bool LinkList<T>::clearList()
{
if (isListEmpty())
{
cout << "List empty clear fail" << endl;
return false;
}
Node<T>*nowNode = m_pList->getNext();
Node<T>*nextNode = m_pList->getNext();
while (nextNode->getNext() != NULL)
{
nextNode = nowNode->getNext();
delete nowNode;
nowNode = nextNode;
}
delete nowNode;
m_iLength = ;
m_pList->setNext(NULL);
return true;
}
template <typename T>
int LinkList<T>::getListLength()
{
return m_iLength;
}
template <typename T>
int LinkList<T>::getElemIndex(T &elem)
{
Node<T> *tempNode = m_pList;
for (int i = ; i < m_iLength; i++)
{
tempNode = tempNode->getNext();
if (elem == tempNode->getData())
{
return i;
}
}
return -;
}
template<typename T>
bool LinkList<T>::getListElem(int index, T *elem)
{
if (index < || index >= m_iLength)
{
return false;
}
Node<T>*tempNode = m_pList;
for (int i = ; i <= index; i++)
{
tempNode = tempNode->getNext();
}
*elem = tempNode->getData();
return true;
} template<typename T>
bool LinkList<T>::ListInsert(int index, T &elem)
{
if (index< || index>m_iLength)
{
return false;
}
Node<T>*tempPreNode = m_pList;
for (int i = ; i < index; i++)
{
tempPreNode = tempPreNode->getNext();
}
Node<T>*newnode = new Node<T>;
if (newnode == NULL)
{
cout << "new node create fail" << endl;
return false;
}
Node<T>*tempNode = tempPreNode->getNext();
tempPreNode->setNext(newnode);
newnode->setNext(tempNode);
newnode->setData(elem);
m_iLength++;
return true;
}
template<typename T>
bool LinkList<T>::ListDelete(int index, T *elem)
{
if (index < || index >= m_iLength)
{
return false;
}
Node<T>* tempPreNode = m_pList;
for (int i = ; i < index; i++)
{
tempPreNode = tempPreNode->getNext();
}
Node<T>*tempNode = tempPreNode->getNext();
tempPreNode->setNext(tempNode->getNext());
*elem = tempNode->getData();
delete tempNode;
m_iLength--;
return true;
}
template<typename T>
void LinkList<T>::ListPrint(void)
{
if (isListEmpty())
{
cout << "List empty" << endl;
return;
}
Node<T>*tempNode = m_pList->getNext();
while (tempNode->getNext() != NULL)
{
tempNode->printData();
tempNode = tempNode->getNext();
}
tempNode->printData();
cout << "end" << endl;
}
//主程序main.cpp//
#include<iostream>
#include<string>
#include"LinkList.h"
using namespace std; int main(void)
{
/*insert data check */
int data[] = { ,,,,,,,,, };
LinkList<int>*linklist = new LinkList<int>;
for (int i = ; i < ; i++)
{
linklist->ListInsert(i, data[i]);
}
linklist->ListPrint();
/*getElemIndex check*/
cout << "getElemIndex:" << linklist->getElemIndex(data[]) << endl;
/*getListElem check*/
int getdata;
linklist->getListElem(, &getdata);
cout << "getListElem:" << getdata << endl;
/*delete data check*/
int deletedata;
linklist->ListDelete(, &deletedata);
cout << "delete data:" << deletedata << endl;
linklist->ListPrint();
/*clearList check*/
linklist->clearList();
linklist->ListPrint(); delete linklist;
linklist = NULL;
system("pause");
return ;
}

结果图:

参考:https://www.cnblogs.com/HongYi-Liang/p/7172345.html?utm_source=itdadao&utm_medium=referral

2018-04-2215:46:49

数据结构c++实现代码-链表的更多相关文章

  1. 自己动手实现java数据结构(二) 链表

    1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...

  2. 数据结构:DHUOJ 删除链表的顺数及倒数第N个节点

    删除链表的顺数及倒数第N个节点 作者: turbo时间限制: 1S章节: DS:数组和链表 题目描述: 可使用以下代码,完成其中的removeNth函数,其中形参head指向无头结点单链表,n为要删除 ...

  3. JavaScript 数据结构与算法3(链表)

    学习数据结构的 git 代码地址: https://gitee.com/zhangning187/js-data-structure-study 1.链表 本章学习如何实现和使用链表这种动态的数据结构 ...

  4. php数据结构课程---2、链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的))

    php数据结构课程---2.链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的)) 一.总结 一句话总结: php是弱类型语言,变量即可表示数值,也可表示对象:链表节点的数据域的值就 ...

  5. jdk1.8HashMap底层数据结构:散列表+链表+红黑树,jdk1.8HashMap数据结构图解+源码说明

    一.前言 本文由jdk1.8源码整理而得,附自制jdk1.8底层数据结构图,并截取部分源码加以说明结构关系. 二.jdk1.8 HashMap底层数据结构图 三.源码 1.散列表(Hash table ...

  6. Java数据结构和算法之链表

    三.链表 链结点 在链表中,每个数据项都被包含在‘点“中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中 ...

  7. 再次复习数据结构:c语言链表的简单操作

    最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少. 现在c指针感觉知道点了,也就匆忙开展数据结 ...

  8. JavaScript数据结构与算法(六) 链表的实现

    // 链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的.每个 // 元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成.下图展 // 示了一个链表的 ...

  9. 数据结构——Java实现单链表

    一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...

随机推荐

  1. Javascript - ExtJs - Itemselector

    引入扩展文件 Extjs4.2根目录下: examples \ ux \ css \ images (这是选择按钮的图片资源) examples \ ux \ css \ ItemSelector.c ...

  2. 修复服务器上出现ImportError: cannot import name main的问题

    在服务器上成功升级pip2之后再运行pip2命令出现如下报错信息 Traceback (most recent call last): File "/usr/bin/pip2.7" ...

  3. centos 秘钥登陆配置

    准备:2台机器,ip分别为:10.1.80.13     10.1.80.14 目的:通过13 ssh远程访问14.无需输入密码 1.首先在10.1.80.13上生成密钥对.cd /root/.ssh ...

  4. java中的进程与线程及java对象的内存结构【转】

    原文地址:http://rainforc.iteye.com/blog/2039501   1.实现线程的三种方式:   使用内核线程实现     内核线程(Kernel Thread, KLT)就是 ...

  5. [转] Python Traceback详解

    追莫名其妙的bugs利器-mark- 转自:https://www.jianshu.com/p/a8cb5375171a   Python Traceback详解   刚接触Python的时候,简单的 ...

  6. Linker Scripts3--SECTIONS Command

    1.前言 SECTIONS命令告诉链接器如何映射输入段到输出段以及在内存中如何放置输出段,SECTIONS命令的格式如下: SECTIONS { sections-command sections-c ...

  7. vsftp、ftps 搭建

    今天公司某个产品预上线,该产品需要向政府某部门提供一些数据. 该部门提交数据需要使用ftps,苦逼的我只能是测试环境搭建一套,用来测试提交数据. 先自行科普下ftps. 一.搭建vsftp 安装vsf ...

  8. Nodejs脚手架搭建基于express的应用

    原文链接:https://www.cnblogs.com/FE-yanyi1993/p/6413042.html 这篇写的非常详细,此处只做记录. 1.安装生成器 $ npm install expr ...

  9. vuex之 mapState, mapGetters, mapActions, mapMutations 的使用

    一.介绍 vuex里面的四大金刚:State, Mutations,Actions,Getters (上次记得关于vuex笔记 http://www.cnblogs.com/adouwt/p/8283 ...

  10. 通过python脚本和zabbix配合监控zookeeper的节点数

    通过python脚本和zabbix配合监控zookeeper的节点数 需求描述: 在日常zabbix监控zookeeper的时候,无法通过shell来获取zookeeper的具体节点信息,没有开放具体 ...