测试框架
#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;
}