C++练习 | 单向链表类模板(包含类模板中静态变量初始化格式)
#include <iostream>
#include <string>
using namespace std; template <class T>
class List
{
private:
T data;
List<T> * next;
static List<T> * tail; //指向最后一个结点
static List<T> * h; //指向头结点
public:
List():next(NULL) //构造头结点
{
h = tail = this;
}
List(T newnode):data(newnode),next(NULL) //构造新结点
{}
void append(T node)
{
tail->next=new List<T>(node);
tail=tail->next;
}//往后面添加结点
bool insert(T node, T posnode)
{
List<T> *cur,*flag;
cur=h;
while(cur->data!=posnode&&cur!=tail->next)//遇到第一个数值相等的就跳出循环,保证是第一个
{
cur=cur->next;
}
if(cur!=NULL)//防止是因为循环到尾部而跳出循环
{
if(cur->next!=NULL)//如果是尾部就按append函数的方式插入
{
List<T> *p=new List<T>(node);
flag=cur->next;
cur->next=p;
p->next=flag;
}
else//如果是链表中间就改变下前面一个和加入节点的next
{
cur->next=new List<T>(node);
tail=cur->next;
}
return true;
}
return false;
}//在结点posnode第一次出现的后面插入新结点node, 插入成功返回true,否则false
void deleteNode(T node)
{
List<T> *now;
now=h->next;
if(now->data==node)
{
if(tail==h->next)//如果b链表尾在头节点后两个节点,tail不太好写,所以拆开来写
{
h->next=NULL;
tail=h;
}
else if(tail==h->next->next)
{
h->next=h->next->next;
tail=h->next;
}
}
while(now->next!=NULL)
{
if(now->next->data==node)
now->next=now->next->next;
else
now=now->next;
}
}//删除结点,注意可能有多个值相同的结点需要删除
void delList()
{
h->next=NULL;
tail=h;
}//删除整个链表
void dispList()
{
List<T> *now;
if(h->next!=NULL)//链表不为空
{
now=h->next;
while(now!=tail->next)
{
cout<<now->data<<" ";
now=now->next;
}
}
cout<<endl;
}//显示链表
friend void print(List<T> *now);
};
template<class T>
List<T>*List<T>::tail=NULL;
template<class T>
List<T>*List<T>::h=NULL;
C++练习 | 单向链表类模板(包含类模板中静态变量初始化格式)的更多相关文章
- c++ 类与函数中static变量初始化问题(转)
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...
- C++类中静态变量和普通变量的区别
静态变量: 1.静态变量会被编到程序的exe里面,从程序启动到结束,它一直存在: 2.静态变量的初始化值为0: 3.全局变量默认是静态变量: 4.在类中的函数变量前面加了static的也是静态变量,只 ...
- 谈谈java中静态变量与静态方法在有继承关系的两个类中调用
谈谈java中静态变量与静态方法在有继承关系的两个类中调用 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量和静态方法在有继承关系的两个类中的问题测试 ...
- C++类中静态变量和静态方法的注意事项
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量仅仅存储一份供全部对象共用.所以在全部对象中都能够共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还能够 ...
- 浅谈Java类中的变量初始化顺序
一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行 ...
- Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征
this 赵本山问奥尼尔:“我的爸爸的爸爸是谁?” 奥尼尔:“不知道” 赵本山:“你傻啊,是我爷爷” 奥尼尔回去问科比:“我的爸爸的爸爸是谁?” 科比:“不知道” 奥尼尔:”你傻啊,是赵本山的爷爷“ ...
- C++类中静态变量和静态方法使用介绍!
原链接:http://www.ecoviews.cn/net/archives/216.html 静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是 ...
- C++类中静态变量
以下是对类中static变量的一点解说 =============================================== 静态数据成员的用法和注意事项例如以下: ...
- C++类中静态变量和静态方法使用介绍
静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是,全局变量或对象是有局限性的.这一章里,我们主要讲述类的静态成员来实现数据的共享. 静态数据成员 ...
随机推荐
- Java集合框架之接口Collection源码分析
本文我们主要学习Java集合框架的根接口Collection,通过本文我们可以进一步了解Collection的属性及提供的方法.在介绍Collection接口之前我们不得不先学习一下Iterable, ...
- Latex中 summation前后距离的设置
use \hspace ,eg., \hspace{-.1cm} before and after summation to stop violation of margin. 比如下面一段公式代码 ...
- python3爬取拉钩招聘数据
使用python爬去拉钩数据 第一步:下载所需模块 requests 进入cmd命令 :pip install requests 回车 联网自动下载 xlwt 进入cmd命令 :pip install ...
- LeetCode 144. 二叉树的前序遍历(Binary Tree Preorder Traversal)
题目描述 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路 由 ...
- ftp相关
已经存在虚拟账户 添加新账户 .在/etc/vsftpd/user.txt里面配置用户名密码 单行是用户名 双行是密码 .导入新用户密码 db_load -T -t hash -f /etc/vsft ...
- Java-类加载(类的生命周期)
类从被加载到虚拟机内存开始,到卸载出内存为止. 解析阶段在某些情况下可以在初始化后再开始,这是为了支持 Java 语言的运行时绑定. 一.类加载时机 JVM 规范没有强制约束类加载过程的第一阶段(加载 ...
- win + T 快捷键
和 alt + tab 不同,win + T会在 在任务栏间的程序间进行switch
- 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_4 响应之返回值是ModelAndView类型
ModelAndView是SpringMvc提供的一个对象 ModelAndView底层源码用也是ModelMap.ModelMap实现过Model的接口 ModelAndView可以直接new出来. ...
- vs code的local history插件
使用vs code来编写前端代码,内存的使用比webstrom要少很多. vs code可以下载中文及debug插件,使用起来会方便很多. vs code不像idea或者webstrom有local ...
- 12@365 java上传文件(word、图片等)至服务器
这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...