您的位置:首页 > 编程语言 > C语言/C++

linkList C++简单链式链表的实现

2018-06-10 15:15 465 查看

模型图示如下图

C++ 通过定义的METHODS来操纵所有的数据,将数据全部拷贝到自己的空间中进行数据的处理。

通过一个指针来指向所管理的数据内存链。

protected:
    Node<T> *m_header;
    int m_len;

// Node的结构体
template <typename T>
struct Node
{
    T t; //
    struct Node<T> *next;
};

对于链表的操作全部是通过函数调用来完成了。

#include <iostream>
using namespace std;

template <typename T>
struct Node
{
T t;
struct Node<T> *next;
};

template <typename T>
class LinkList
{
public:
LinkList();
~LinkList();

public:
int clear();
int insert(T &t, int pos);
int get(int pos, T &t);
int del(int pos, T &t);
int getLen();

protected:
Node<T> *m_header;
int m_len;

};

template <typename T>
LinkList<T>::LinkList()
{
m_header = new Node<T>;
m_header->next = NULL;
m_len = 0;
}

template <typename T>
LinkList<T>::~LinkList()
{
Node<T> *tmp = NULL;

while (m_header !=NULL)
{
tmp = m_header->next;
delete m_header;
m_header = tmp;
}
}

template <typename T>
int LinkList<T>::clear()
{

//把旧的结点 del掉
Node<T> *tmp = NULL;

while (m_header)
{
tmp = m_header->next;
delete m_header;
m_header = tmp;
}

//重新创建
m_header = new Node<T>;
m_header->next = NULL; m_len = 0; return 0; } template <typename T> int LinkList<T>::insert(T &t, int pos) { Node<T> *current = NULL; current = m_header; for (int i=0; i<pos; i++) { current = current->next; } //把上层应用的t结点 缓存到容器中 Node<T> *node = new Node<T>; node->next = NULL; node->t = t; // 把t1缓存下来 //把node结点 在pos位置 加入到链表中 node->next = current->next; current->next = node; m_len ++; return 0; } template <typename T> int LinkList<T>::get(int pos, T &t) { Node<T> *current = NULL; current = m_header; for (int i=0; i<pos; i++) { current = current->next; } t = current->next->t; return 0; } template <typename T> int LinkList<T>::del(int pos, T &t) { Node<T> *current = NULL; Node<T> *ret = NULL; current = m_header; for (int i=0; i<pos; i++) { current = current->next; } ret = current->next; t = ret->t; //把缓存的结点 给上层应用t //删除操作 current->next = ret->next; m_len --; delete ret; //注意释放内存 因为insert的时候 new Node<T> return 0; } template <typename T> int LinkList<T>::getLen() { return m_len; }
// 就上面这些操作接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: