`
hzy3774
  • 浏览: 985026 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

C++类模板构建链表,类似于list<>

阅读更多
#include <iostream>
#include <string>
using namespace std;

template<class T> class Node//创建一个类模板,一个可以放入任何类型节点的链表
{
public:
	Node(T val, Node* next):val(val),next(next){}
	static void showAll();//打印全部节点的值
	static void insertHead(T);//头插
	static void insertTail(T);//尾插
	static void delHead();//删头
	static void delTail();//删尾
	static void clear();//清空
protected:
	T val;
	Node *next;
	static Node *head;
private:
};

template<class T> Node<T>* Node<T>::head = 0;

template<class T> void Node<T>::showAll(){//打印全部节点的值
	Node *p = head;
	while (p)
	{
		cout<<p->val<<"  ";
		p = p->next;
	}
	cout<<endl;
}

template<class T> void Node<T>::insertHead(T val){//头插
	Node *p = new Node(val, head);
	head = p;
}

template<class T> void Node<T>::insertTail(T val){//尾插
	Node *p = new Node(val, 0);
	if (!head)
	{
		head = p;
		return;
	}
	Node *q = head;
	while (q->next)
	{
		q = q->next;
	}
	q->next = p;
}

template<class T> void Node<T>::delHead(){//删头
	Node *p = head;
	if (head)
	{
		head = head->next;
		delete p;
	}
}

template<class T> void Node<T>::delTail(){//删尾
	if (!head)
	{
		return;
	}
	if (!(head->next))
	{
		delete(head);
		head = NULL;
		return;
	}
	Node *p = head;
	while (p->next->next)
	{
		p = p->next;
	}
	delete(p->next);
	p->next = NULL;
}

template<class T> void Node<T>::clear(){//清空
	Node *p = head;
	Node *q = 0;
	head = 0;
	while (p)
	{
		q = p;
		p = p->next;
		delete q;
	}
}

class Student//创建一个自定义的学生类
{
public:
	Student(string name, int age,char sex):name(name), age(age), sex(sex){}
	void showInfo(){
		cout<<"姓名:"<<name<<" 年龄:"<<age<<" 性别:"<<sex<<endl;
	}
protected:
	string name;
	int age;
	char sex;
private:
};

void Node<Student>::showAll(){//学生类节点和其他基本数据类型不同,不能直接用<<输出,所以重载showAll()
	Node *p = head;
	while (p)
	{
		p->val.showInfo();
		p = p->next;
	}
}

void main(){
	for (int i = 1; i < 10; i++)
	{
		Node<int>::insertTail(i);//这时Node<int>称为一个用类模板生成的模板类
		Node<float>::insertTail(i / 10.0f);
		Node<double>::insertTail(i / 10.00);
		Node<Student>::insertTail(Student("stu", i, 'F'));
	}
	Node<int>::showAll();
	Node<float>::showAll();
	Node<double>::showAll();
	Node<Student>::showAll();
}

 

 

  • 大小: 35.4 KB
分享到:
评论

相关推荐

    C++链表类 模板类

    C++链表类 模板类 #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include "LinkedList.h" using namespace std; template &lt;class T&gt; Node&lt;T&gt; *LinkedList&lt;T&gt;::GetNode(const T& item, Node&lt;T&gt;* ptrNext) //生成新结点...

    实现一个模板类的链表(c++)

    2) 用List模板定义一个List&lt;int&gt;类型的模板类对象int_listC,从键盘读入n个整数,调用Push_back函数将这n个整数依次插入到该链表中;(4分) 3) 用List模板定义一个List&lt;int&gt;类型的模板类对象int_listA,调用List的...

    数据结构算法与应用 很详细的,数据结构算法全集 这个是你想找的

    图 365&lt;br&gt;12.1 基本概念 365&lt;br&gt;12.2 应用 366&lt;br&gt;12.3 特性 368&lt;br&gt;...链表 374&lt;br&gt;12.6 网络描述 375&lt;br&gt;12.7 类定义 376&lt;br&gt;12.7.1 不同的类 376&lt;br&gt;12.7.2 邻接矩阵类 377&lt;br&gt;12.7.3 扩充Chain类 380&lt;br&gt;12.7.4...

    实验报告2 链表倒置问题.doc

    实验报告2 链表倒置问题&lt;br&gt;1. 实验...&lt;br&gt;&lt;br&gt;3. 解题方法&lt;br&gt;3.1 求解方法&lt;br&gt;将顺序表的首尾元素互换,第二个与倒数第二个互换,如此类推。到中间停止。&lt;br&gt;&lt;br&gt;3.2 数据结构&lt;br&gt;typedef struct LNode&lt;br&gt;......

    通讯录系统 C++课程设计报告

    《高级语言程序设计》&lt;br&gt;...成员名 数据类型 长度 含义&lt;br&gt;1 name char 8 学生姓名&lt;br&gt;2 sex char 2 学生性别&lt;br&gt;3 tel int 6 学生电话&lt;br&gt;4 add char 20 学生住址&lt;br&gt;(2) 以结构体建类,以类为结点建立链表&lt;br&gt; &lt;br&gt;

    链表类 c++ 实现的 链表类 c++ 实现的

    链表类 c++ 实现的 链表类 c++ 实现的 链表类 c++ 实现的

    c++头文件大全.txt

    &lt;list&gt;:链表 &lt;map&gt;:映射 &lt;memory&gt;:内存管理 &lt;optional&gt;:可选值 &lt;queue&gt;:队列 &lt;random&gt;:随机数 &lt;regex&gt;:正则表达式 &lt;set&gt;:集合 &lt;stack&gt;:栈 &lt;string&gt;:字符串 &lt;tuple&gt;:元组 &lt;unordered_map&gt;:无序映射 ...

    c++ 模板 双向链表 操作

    c++模板实现双向链表操作如逆序建立双向链表,插入结点等。

    c++模板、链表的简单使用

    c++,类、模板、链表的简单使用,包括入链表、出链表等等

    支持类模版的C++双向链表

    一种支持类模版和函数模版的C++双向链表,实现了各种排序算法(排序原则可定制),包含学生信息的使用示例(VC 6.0、VS2008).

    C++实现链表,模板类

    C++实现的模板链表类,没有用到STL的list,是用指针实现的。

    C++模板类——双链表

    使用C++做的双链表模板类 具有头插法,尾插法,左向插入,右向插入,删除结点,获取结点值,设置结点值,复制构造函数,还重载了输出操作符、赋值操作符、相等操作符和不等操作符,还具有倒置链表的功能。...

    双向链表及其操作

    /* 双向循环链表 */&lt;br&gt; DNODE *p, *q;&lt;br&gt; q = malloc( sizeof *p );&lt;br&gt; q-&gt;data = x;&lt;br&gt; if ( i == 0 ) {&lt;br&gt; q-&gt;prior = *head;&lt;br&gt; q-&gt;next = *head;&lt;br&gt; *head = q;&lt;br&gt; return 0;&lt;br&gt; }&lt;br&gt; p = *head;&lt;br&gt;...

    C++课程设计源代码.rar(原创)V20080505B

    &lt;br&gt;C++,文件操作,链表操作,源代码。需要4分的资源分。&lt;br&gt;536 KB (549,067字节)。&lt;br&gt;D:&lt;br&gt;│ Niit项目案例(C++).doc&lt;br&gt;│ 软件工程2007级C++项目要求.doc&lt;br&gt;│ &lt;br&gt;├─参考&lt;br&gt;│ ├─demo&lt;br&gt;│ │ │ ...

    C#编程经验技巧宝典

    27&lt;br&gt;&lt;br&gt;0056 强行改变运算符的运算顺序 27&lt;br&gt;&lt;br&gt;第3章 程序算法 29&lt;br&gt;&lt;br&gt;3.1 数据结构 30&lt;br&gt;&lt;br&gt;0057 如何实现单向链表 30&lt;br&gt;&lt;br&gt;0058 如何实现双向链表 35&lt;br&gt;&lt;br&gt;0059 如何实现堆栈 41&lt;br&gt;...

    数据结构.C++语言描述_第一部分

    数据结构.C++语言描述电子书&lt;br&gt;第1章 概述&lt;br&gt;第2章 基本数据类型&lt;br&gt;第3章 抽象数据类型和类&lt;br&gt;第4章 群体类&lt;br&gt;第5章 栈和队列&lt;br&gt;第6章 抽象操作&lt;br&gt;第7章 形式数据类型&lt;br&gt;第8章 类和动态存储&lt;br&gt;第9章 链表...

    创建一个数据类型为T的链表类模板List,实现以下成员函数的模拟测试.cpp

    2) 用List模板定义一个List类型的模板类对象int_listC,从键盘读入n个整数,调用Push_back函数将这n个整数依次插入到该链表中;(4分) 3) 用List模板定义一个List类型的模板类对象int_listA,调用List的成员函数...

    C源代码实例集

    &lt;br&gt; &lt;br&gt;&lt;br&gt; ◎ 光盘目录清单如下:&lt;br&gt;&lt;br&gt;第一部分 基础篇&lt;br&gt; &lt;br&gt;001 第一个C程序 &lt;br&gt;002 运行多个源文件 &lt;br&gt;003 求整数之积 &lt;br&gt;004 比较实数大小 &lt;br&gt;005 字符的输出 &lt;br&gt;006 显示变量所占字节数 &lt;br&gt;007 ...

    c++ 文件读取,链表操作例子

    c++ 文件读取,链表操作例子,读文件流

    链表类模板封装链表操作

    用模板实现链表的建立删除等操作,可以根据具体情况稍作修改即可实现链表操作,或直接使用,我在链表的学习和类模板的学习和以后的编程时这种链表构造思想觉得挺好的,有点面向对象的意思……粗浅的理解呵呵!

Global site tag (gtag.js) - Google Analytics