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++类中静态变量和静态方法使用介绍
静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是,全局变量或对象是有局限性的.这一章里,我们主要讲述类的静态成员来实现数据的共享. 静态数据成员 ...
随机推荐
- zabbix监控部署
zabbix是一款开源的监控软件,下面来一起学习一下zabbix监控的部署吧 环境: 主机名 地址 系统 角色 tiandong 192.168.209.3 centos6.5 服务端 winter ...
- HTML状态消息和方法
参考链接1 参考链接2 当浏览器从 web 服务器请求服务时,可能会发生错误. HTML消息 1xx: 信息 消息: 描述: 100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝 ...
- Java线程中的异常处理
对于对线程,当主线程中有子线程运行出现异常时,主线程是不能捕获到该异常的,子线程会直接退出,不会记录任何日志. 解决: 1.子线程中try catch. 2.设置线程的未捕获异常处理器,Uncaugh ...
- linux vmware 安装步骤
一.下载vmware软件 二.下载centos镜像文件 三.安装步骤 以上相当于于硬件设备已经准备ok,接下来安装软件
- vscode 占内存的方法
1.修复vs code 造成 rg.exe内存占用过大的问题 search.followSymlinks: false 2.修复vs code 造成 git.exe内存占用过大的问题 git.enab ...
- jmeter源代码开发环境构建
1.下载jmeter源码:http://jmeter.apache.org/download_jmeter.cgi 2.新建-->java Project-->Next-->src- ...
- storm备忘
[命令]storm rebalance topology-name [-w wait-time-secs] [-n new-num-workers] [-e component=parallelism ...
- hive 使用笔记(table format;lateral view横表转纵表)
1. create table 创建一张目标表,指定分隔符和存储格式: create table tmp_2 (resource_id bigint ,v int) ROW FORMAT DELIMI ...
- Python:百科
ylbtech-Python:百科 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越 ...
- Struts2常量_Action配置路径_通配符
Struts2中常用的常量 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker .velocity的输出 <cons ...