数据结构c++实现代码-链表
/*节点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++实现代码-链表的更多相关文章
- 自己动手实现java数据结构(二) 链表
1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...
- 数据结构:DHUOJ 删除链表的顺数及倒数第N个节点
删除链表的顺数及倒数第N个节点 作者: turbo时间限制: 1S章节: DS:数组和链表 题目描述: 可使用以下代码,完成其中的removeNth函数,其中形参head指向无头结点单链表,n为要删除 ...
- JavaScript 数据结构与算法3(链表)
学习数据结构的 git 代码地址: https://gitee.com/zhangning187/js-data-structure-study 1.链表 本章学习如何实现和使用链表这种动态的数据结构 ...
- php数据结构课程---2、链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的))
php数据结构课程---2.链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的)) 一.总结 一句话总结: php是弱类型语言,变量即可表示数值,也可表示对象:链表节点的数据域的值就 ...
- jdk1.8HashMap底层数据结构:散列表+链表+红黑树,jdk1.8HashMap数据结构图解+源码说明
一.前言 本文由jdk1.8源码整理而得,附自制jdk1.8底层数据结构图,并截取部分源码加以说明结构关系. 二.jdk1.8 HashMap底层数据结构图 三.源码 1.散列表(Hash table ...
- Java数据结构和算法之链表
三.链表 链结点 在链表中,每个数据项都被包含在‘点“中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中 ...
- 再次复习数据结构:c语言链表的简单操作
最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少. 现在c指针感觉知道点了,也就匆忙开展数据结 ...
- JavaScript数据结构与算法(六) 链表的实现
// 链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的.每个 // 元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成.下图展 // 示了一个链表的 ...
- 数据结构——Java实现单链表
一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...
随机推荐
- SFTP远程连接服务器上传下载文件-vs2010项目实例
本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2010 vs2010项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...
- FLASK-----基本知识(一)
中文文档(http://docs.jinkan.org/docs/flask/) 英文文档(http://flask.pocoo.org/docs/0.11/) FLASK介绍 Flask是一个基于P ...
- valueForKeyPath用途
可能大家对- (id)valueForKeyPath:(NSString *)keyPath方法不是很了解. 其实这个方法非常的强大,举个例子: NSArray *array = @[@"n ...
- OGG-01168
https://blog.csdn.net/zhrzhl/article/details/21698659
- Firefox is already running,实际后台查不到进程了
Firefox is already running, but is not responding. To open a new window, you must first close the ex ...
- Nginx安装及配置详解【转】
nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...
- expect学习笔记及实例详解
因为最近正在学习expect脚本,但是发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的 ...
- web@前端--html,css,javascript简介、第一个页面(常用标签简介)
1.什么是标签#1.在HTML中规定标签使用英文的的尖括号即`<`和`>`包起来,如`<html>`.`<head>`.`<body>`都是标签,#2. ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- Linux之 nginx-redis-virtualenv-mysql
mysql maraidb相关 .yum安装好,启动 安装: yum install mariadb-server mariadb 启动mabiadb: systemctl start mariadb ...