数据结构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中,我们可以将单链表定义成一个类,单链表的基 ...
随机推荐
- css - 盒子内外边距
css - 盒子内外边距 元素内边距 内边距是指元素包含的内容离元素边框之间的间距,padding会撑大盒子.在浏览器中显示的元素宽高包含了padding. div{ width:200px; ...
- android PopupWindow 显示问题
设置可点击,其余控件也可点击,等操作 setOutsideTouchable(true); setBackgroundDrawable(new BitmapDrawable()); setTouc ...
- HTTP协议07-通用首部字段
通用首部字段 通用首部字段是指,请求报文和响应报文双方都会使用的首部. 1)Cache-Control 通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制. 指令的参数可以多选, ...
- 检索每个字符串的子串(python散列表实现)
import re def get_str(i,num): str_list = re.findall(r'.{{{str_length}}}'.format(str_length=i), num) ...
- how to get address of member function
see:http://www.cplusplus.com/forum/general/136410/ & http://stackoverflow.com/questions/8121320/ ...
- C++编程题
1.不用系统提供的字符串转int的功能,将一个字符串转换为对应的值 #include <iostream> using namespace std; static int StringTo ...
- telnet mysql时出现:is not allowed to connect to this MySQL serverConnection closed by foreign host问题的解决
有时候telnet一个mysql服务器的时候会出现: Host '192.168.0.1' is not allowed to connect to this MySQL serverConnecti ...
- 如何去掉li标签的重叠边框
当我们的li标签设置了border的时候就会出现重叠边框,如何去掉呢,见代码 html代码 <ul class="friendLink_list"> <li> ...
- js之雪花飘落
有很多网站都有雪花或花瓣飘落的特效,看上去很好看.我来用js实现这个效果. 在写代码之前可以先引入bass.css对样式做下处理: 1.html部分 先建一个文件夹,在body中插入如下代码 < ...
- C#操作excel(多种方法比较)
1.用查询表的方式查询并show在数据集控件上. public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; D ...