List 模板实现

原创 2012年03月23日 15:45:08
// template.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include <iostream>
using namespace std;


template<class T>
class List
{
public:
List();
void Add(T&);
void Remove(T&);
T * Find(T&);
void PrintList();
~List();
protected:
struct Node
{
Node * pNext;
T * pT;
};
Node * pFirst;
};
template<class T>List<T>::List() //构造函数
{
pFirst = NULL;
}


template<class T> void List<T>::Add(T &t)
{
Node * temp = new Node();
temp->pT = &t;
temp->pNext = pFirst;
pFirst = temp;
}


template<class T> void List<T>::Remove(T &t)
{
Node * q = NULL; //待删节点
if(*(pFirst->pT) == t)
{
q = pFirst;
pFirst = pFirst ->pNext;
}
else 
for(Node * p = pFirst,* r = pFirst;p!=NULL;r=p,p=p->pNext)
{
if(*(p->pT) == t)
{
q = p;
r->pNext = p->pNext;
break;
}
}
if(q)
{
delete q->pT;
delete q;
}
}


template<class T> T * List<T>::Find(T & t)
{
for(Node * q =pFirst;q != NULL;q = q->pNext)
if(*(q->pT) ==t)
return q->pT;
return 0;
}


template<class T> void List<T>::PrintList()
{
for(Node * q = pFirst;q != NULL;q = q->pNext)
cout<<*(q->pT)<<"  ";
cout<<endl;
}


template<class T>List<T>::~List()
{
Node * p;
while(p=pFirst)
{
pFirst = pFirst->pNext;
delete p->pT;
delete p->pNext;
}
pFirst = NULL;
}




int _tmain(int argc, _TCHAR* argv[])
{
List<float>floatlist;
for(int i=0;i<5;i++)
{
floatlist.Add(* (new float(i+0.1)));
}
floatlist.PrintList();
float b= 1.1;
float *q = floatlist.Find(b);
if(q)
floatlist.Remove(*q);
floatlist.PrintList();
system("pause");
return 0;
}

自己动手写数据结构:双向循环List类模板C++实现(功能较全)

双向循环链表的概念想必大家应该比我清楚呵,在此不多说,主要想总结一下我在编程过程中的两点经验:        第一,如果在链表中插入时仅仅指出直接前驱结点,钩链时必须注意先后次序是: “先右后左”。部...

模板类模拟实现List

上一篇中我模拟实现了vector,接着这个当然就是list了,首先对于list,在库函数里面,list是一个双向的,即既含有next域,也含有prev域,每个节点都含有这样的结构,我们在写的时候要把一...

C++之模板实现list

#include #include using namespace std;template struct ListNode { ListNode(const T& data = T()) ...

单链表(List)的模板实现

//Filename :List.h #ifndef LIST_H #define LIST_H template struct LinkNode{ //节点结构体定义 T data; ...

C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和具体的应用实现(STL),本文是系列总结的第二篇,主要针对线性表中的链表 S...

list类的C++模板实现

/* 2017/07/20 Liu YK */#pragma once #include #include #include #include namespace MYSTL {#define ...

数据结构与算法之单链表 自己实现STL list模板类

自己写的一个简单的单链表模板类,类似STL功能,不过是单链表,与真正的STL肯定很大区别,只是自己模仿一下而已。 #include using namespace std; template...

带链表头指针和尾指针的 list 模板实现

#ifndef LISTCLASS_H#define LISTCLASS_H#include"nodeclass.h"templateclass List{ Node *head,*tail; //链...

以模板模拟实现List容器

#pragma once #include using namespace std; template struct ListNode { ListNode(const T& x = T()...

【c++】模板实现vector和list

前面我们也知道模板是泛型编程的基础,是实现类型无关的代码,是一种代码复用的重要手段。 一:模板实现Vector: .h文件 #pragma once   #include #include #inc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:List 模板实现
举报原因:
原因补充:

(最多只允许输入30个字)