模型图示如下图
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; }
// 就上面这些操作接口