測試框架
#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;
}