测试框架
#include<iostream> #include"LinkList_cpp.cpp" using namespace std; struct Teacher { char name[64]; int age; }; int main() { Teacher t1, t2, t3, t4, t5, tmp; t1.age = 21; t2.age = 22; t3.age = 23; t4.age = 24; t5.age = 25; LinkList_cpp<Teacher> list; list.Inster(t1, 0); list.Inster(t2, 0); list.Inster(t3, 0); list.Inster(t4, 0); list.Inster(t5, 0); for (int i = 0; i < list.Length(); i++) { list.Get(tmp, i); cout << tmp.age << " "; } //链表的销毁 while (list.Length()>0) { list.Delete(tmp, 0); cout << tmp.age << " "; } cout << "Hello,,," << endl; system("pause"); return 0; }头文件
LinkList_cpp.h
#pragma once //在插入元素的时候,模板类中,应该把每一个t保存下来 //模板类中应该能非配节点 缓存节点=====》思想 //怎么样缓存,,做链表 template <typename T> struct Node { T t; Node<T> *next; }; template <typename T> class LinkList_cpp { public: LinkList_cpp(void); ~LinkList_cpp(void); /*清空列表 回到初始状态*/ void Clear(); /*获取链表的长度*/ int Length(); /*获取指定位置的链表的元素数据*/ int Get(T &t, int pos); /*插入元素数据*/ int Inster(T &t,int pos); /*元素数据删除*/ int Delete(T &t, int pos); private: Node<T> *head;//在链表中 建一个待头节点的链表 int len; };头文件的实现
LinkList_cpp.cpp
#include "LinkList_cpp.h" #include<stdlib.h> #include<stdio.h> #include<string.h> template <typename T> LinkList_cpp<T>::LinkList_cpp(void) { head = new Node<T>; head->next = NULL; this->len=0; } template <typename T> LinkList_cpp<T>::~LinkList_cpp(void) { Node<T> *tmp = NULL; while (head!=NULL) { tmp = head->next;//删除链表时候,缓存后面的点 delete head; head = tmp; } len = 0; head = NULL; } /*清空列表 回到初始状态*/ template <typename T> void LinkList_cpp<T>::Clear() { Node<T> *tmp = NULL; while (head != NULL) { tmp = head->next;//删除链表时候,缓存后面的点 delete head; head = tmp; } head = new Node<T>; head->next = NULL; int len = 0; } /*获取链表的长度*/ template <typename T> int LinkList_cpp<T>::Length() { return len; } /*获取指定位置的链表的元素数据*/ template <typename T> int LinkList_cpp<T>::Get(T &t, int pos) { Node<T> *current = NULL; current = head; for (int i = 0; i <pos; i++) { current = current->next; } t = current->next->t;//把缓存的t传给调用者 return 0; } /*插入元素数据*/ template <typename T> int LinkList_cpp<T>::Inster(T &t, int pos) { Node<T> *current = NULL; current = head; for (int i = 0; i <pos ; i++) { current = current->next; } // Node<T> *node = new Node<T>; if (node==NULL) { return 0; } node->t = t;//缓存外部数据 node->next = NULL; //让新节点 链接后续链表 node->next = current->next; //让位置2 连接新节点2 current->next = node; len++; return 0; } /*元素数据删除*/ template <typename T> int LinkList_cpp<T>::Delete(T &t, int pos) { Node<T> *current = NULL; Node<T> *ret = NULL; current = head; for (int i = 0; i <pos; i++) { current = current->next; } ret = current->next;//被删除的元素 t = ret->t;//把缓存t copy出来 current->next = ret->next; len--; delete ret; return 0; }