`
hzy3774
  • 浏览: 993028 次
  • 性别: 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++头文件大全

    - 类似于`&lt;stdlib.h&gt;`,提供了通用的实用工具函数。 10. **`&lt;cstring&gt;`**: - 类似于`&lt;string.h&gt;`,提供了字符串操作函数。 11. **`&lt;ctime&gt;`**: - 类似于`&lt;time.h&gt;`,提供了时间日期处理函数。 12. **`&lt;deque...

    清华大学C++进阶讲义:第10章 泛型程序设计与C++标准模板库.pdf

    例如,一个插入排序函数模板可能这样定义:`template&lt;class Sortable&gt;` `void insertionSort(Sortable a[], int n);` 这里`Sortable`就是一个概念,它指代了一组满足特定条件的数据类型。 #### C++标准模板库(STL) ...

    STL ATL WTL的联系与区别

    STL的13个主要头文件包括:&lt;algorithm&gt;、&lt;deque&gt;、&lt;functional&gt;、&lt;iterator&gt;、&lt;vector&gt;、&lt;list&gt;、&lt;map&gt;、&lt;memory&gt;、&lt;numeric&gt;、&lt;queue&gt;、&lt;set&gt;、&lt;stack&gt;和&lt;utility&gt;,这些文件包含了STL的所有核心组件。例如,`std::...

    数据结构各种算法实现(C++模板) 数据结构经典实例

    ### 数据结构各种算法实现(C++模板) 数据结构经典实例 #### 1、顺序表 **顺序表**是一种基本的数据结构,通常使用数组实现。在C++中,可以通过模板类来实现一个通用的顺序表。 ##### Seqlist.h ```cpp const int...

    C++标准模板库指南_C++_

    STL广泛使用了模板,如`vector&lt;T&gt;`、`map&lt;Key, T&gt;`等。模板类和函数使得STL可以处理多种数据类型,增强了代码的复用性。 8. 栈和队列: `stack`和`queue`容器适配器提供了后进先出(LIFO)和先进先出(FIFO)的...

    Visual C++ 6.0 模板库参考手册.pdf.zip

    总之,《Visual C++ 6.0 模板库参考手册》是学习和掌握C++模板编程的宝贵资源,它涵盖了从基础到高级的主题,包括模板的使用、STL的应用以及与异常处理和性能优化相关的实践。通过深入研究这本手册,开发者能够更好...

    数据结构各种算法实现(C++模板)

    - 循环链表的操作类似于单链表,但有特定的循环边界条件。 3. **栈(Stack)** - **顺序栈(SeqStack.h)** - 顺序栈使用顺序表来实现栈的操作,如后进先出(LIFO)。 - 主要操作包括压栈(push)和出栈(pop)...

    模板与STL 学习stl模板库的一定要下

    - **迭代器**:迭代器是访问容器中元素的接口,类似于指针,但提供了更多的操作,如前向、后向、双向和随机访问迭代器。 - **算法**:STL提供了一组强大的算法,如`sort`用于排序,`find`用于查找,`copy`用于复制...

    吕鑫老师C++第十课学生系统(自己实现的仿stl的list类+表外排序)

    在吕鑫老师的C++第十课中,我们探讨的是如何构建一个学生系统,这个系统的核心是通过自定义的仿STL的list类以及采用表外排序技术来实现的。STL,即Standard Template Library,是C++标准库的一部分,提供了一系列...

    vector list map pair stl 标准模板库 c++

    它的元素是连续存储的,因此可以通过下标访问元素,类似于C语言的数组。 - `push_back()`和`pop_back()`用于在末尾添加或移除元素。 - `insert()`和`erase()`函数可以插入或删除元素在指定位置。 - `reserve()`...

    C++API标准库

    C++ API标准库是C++编程中不可或缺的一部分,它提供了丰富的功能,使开发者能够构建高效、可靠的软件系统。这些库包括了输入/输出操作、容器、算法、字符串处理、异常处理等多个方面,覆盖了从基本数据类型到复杂...

    STL 简介,标准模板库

    STL,全称为Standard Template Library,是C++编程语言中的一种重要库,它提供了一系列高效且灵活的容器、算法和迭代器,旨在帮助开发者构建更高效、可维护的代码。STL的核心理念是通过模板机制实现泛型编程,使得...

    C++ API(数据结构)

    `vector`类似于动态数组,支持快速随机访问,但插入和删除操作在非尾部进行时效率较低;`list`则是一个双向链表实现,适用于频繁插入和删除的情况;`deque`(双端队列)结合了数组和链表的优点,支持两端的快速插入...

    c++参考手册、标准库手册

    迭代器提供一种访问容器中元素的方式,类似于指针,但更安全和通用。算法是一组用于操作容器内元素的函数,如sort(排序)、find(查找)和copy(复制)。函数对象(或称为仿函数)是具有函数调用操作的类,它们可以...

    数据结构C++语言描述——应用标准模板库(STL)

    函数对象,也称为仿函数(functors),是STL中的一类特殊对象,它们的行为类似于函数,但可以拥有状态并支持运算符重载。例如,std::less和std::greater可以作为比较函数对象,用于定义排序顺序。 在《数据结构C++...

    标准C++宝典(美国.rar

    容器是用来存储元素的类模板,如vector是一种动态数组,list则是一种双向链表。迭代器是访问容器内元素的一种方式,类似于指针,但更安全、功能更强大。算法是处理容器中元素的一系列函数模板,例如排序、查找、复制...

    c++课件 电子科技大学

    - 迭代器:作为访问容器内元素的接口,类似于指针,但更加灵活且安全。 - 算法:如排序(sort)、查找(find)、遍历(for_each)等,可以极大地提高代码的可读性和效率。 - 函数对象(Functors):实现了函数调用...

Global site tag (gtag.js) - Google Analytics