36.创建模板mylist
- node.h
#pragma once
//创建模板
template <class T>
class Node
{
public:
T t;//数据
Node *pNext;//指针域
}; - list.h
#pragma once
#include "Node.h"
#include <iostream>
using namespace std; template <class T>
class List
{
public:
Node<T> *pHead; public:
List();
void add(T t);//尾部插入
void show();//显示
Node<T> * find(T t);//查找
void change(Node<T> *p, T newt);//修改
int getnum();//获取个数
bool deletet(T t);
void sort();
void deletesame();//删除相同的元素
bool clear();
void rev(); void insert(T oldt, T newt);
void merge(List & list); ~List();
}; - list.cpp
#include "List.h" template <class T>
List<T>::List()
{
this->pHead = nullptr;//设置空节点
cout << "链表创建" << endl; } template <class T>
List<T>::~List()
{
cout << "链表销毁" << endl; }
template <class T>
void List<T>::add(T t)
{
Node<T> *pnew = new Node<T>;//分配节点
pnew->t = t;//赋值
pnew->pNext = nullptr; if (pHead==nullptr)
{ this->pHead = pnew;//头结点 }
else
{
Node<T> *p = pHead;//获取头结点位置
while (p->pNext!=nullptr)//循环到尾部
{
p = p->pNext; }
p->pNext = pnew; } } template <class T>
void List<T>::show()
{ Node<T> *p = pHead;//获取头结点位置
while (p!= nullptr)//循环到尾部
{ cout << p->t << " ";
p = p->pNext; }
cout << endl; } template <class T>
Node<T> * List<T>::find(T t)
{
Node<T> *p = pHead;//获取头结点位置
while (p != nullptr)//循环到尾部
{
if (p->t==t)
{
return p;
} p = p->pNext; }
return nullptr; } template <class T>
void List<T>::change(Node<T> *p, T newt)
{
if (p==nullptr)
{
return;
} p->t = newt;
} template <class T>
int List<T>::getnum()
{
int i = ;
Node<T> *p = pHead;//获取头结点位置
while (p != nullptr)//循环到尾部
{ i++;
p = p->pNext; } return i; }
template <class T>
bool List<T>::deletet(T t)
{ Node<T> *p = this->find(t);
if (p==nullptr)
{
return false;
}
else
{ if (p==pHead)//头结点
{
pHead = p->pNext;
delete p;
}
else
{
Node<T> *p1, *p2;
p1 = pHead;
p2 = p1->pNext;
while (p2!=p)//删除一个节点,获取前一个节点
{
p1 = p2;
p2 = p2->pNext; } p1->pNext = p2->pNext;//跳过p2
delete p2; }
return true;
}
} template <class T>
void List<T>::sort()
{
for (Node<T> *p1 = pHead; p1 != NULL;p1=p1->pNext)
{
for (Node<T> *p2 = pHead; p2!= NULL; p2 = p2->pNext)
{
if (p1->t < p2->t)
{
T temp;
temp = p1->t;
p1->t = p2->t;
p2 -> t = temp; }
}
}
} template<class T>
void List<T>::deletesame()//重新生成
{ Node<T> *p1, *p2;
p1 = pHead->pNext;
p2 = pHead;
while (p1!=nullptr)
{
if (p1->t==p2->t)
{
//cout << "=";
p2->pNext = p1->pNext;
delete p1;
p1 = p2->pNext;
}
else
{
p2 =p1;
p1 = p1->pNext; }
}
} template<class T>
bool List<T>::clear()
{
if (pHead ==nullptr)
{
return false;
} Node<T> *p1, *p2;
p1 = pHead->pNext;
while (p1!=nullptr)
{
p2 = p1->pNext;
delete p1;
p1 = p2;
}
delete pHead;
pHead = nullptr; return true; }
template<class T>
//递归
void List<T>::rev()
{
if (pHead==nullptr || pHead->pNext==nullptr)
{
return;
}
else
{
Node<T> *p1, *p2, *p3;
p1 = pHead;
p2 = p1->pNext; while (p2!=nullptr)
{
p3 = p2->pNext;
p2->pNext = p1; p1 = p2;
p2 = p3; }
pHead->pNext= nullptr;
pHead = p1; } }
template<class T>
void List<T>::insert(T oldt, T newt)
{ Node<T> *p = find(oldt);
if (p!=nullptr)
{ Node<T> *p1, *p2;
p1 = pHead;
p2 = p1->pNext;
while (p2 != p)
{
p1 = p2;
p2 = p2->pNext; }
Node<T> *pnew = new Node<T>;
pnew->t = newt;
pnew->pNext = p2;
p1->pNext = pnew;
}
} template<class T>
void List<T>::merge(List & list)
{
Node<T> *p = pHead;//获取头结点位置
while (p->pNext != nullptr)//循环到尾部
{ p = p->pNext; }
p->pNext = list.pHead;
} - main.cpp
#include "List.h" template <class T>
List<T>::List()
{
this->pHead = nullptr;//设置空节点
cout << "链表创建" << endl; } template <class T>
List<T>::~List()
{
cout << "链表销毁" << endl; }
template <class T>
void List<T>::add(T t)
{
Node<T> *pnew = new Node<T>;//分配节点
pnew->t = t;//赋值
pnew->pNext = nullptr; if (pHead==nullptr)
{ this->pHead = pnew;//头结点 }
else
{
Node<T> *p = pHead;//获取头结点位置
while (p->pNext!=nullptr)//循环到尾部
{
p = p->pNext; }
p->pNext = pnew; } } template <class T>
void List<T>::show()
{ Node<T> *p = pHead;//获取头结点位置
while (p!= nullptr)//循环到尾部
{ cout << p->t << " ";
p = p->pNext; }
cout << endl; } template <class T>
Node<T> * List<T>::find(T t)
{
Node<T> *p = pHead;//获取头结点位置
while (p != nullptr)//循环到尾部
{
if (p->t==t)
{
return p;
} p = p->pNext; }
return nullptr; } template <class T>
void List<T>::change(Node<T> *p, T newt)
{
if (p==nullptr)
{
return;
} p->t = newt;
} template <class T>
int List<T>::getnum()
{
int i = ;
Node<T> *p = pHead;//获取头结点位置
while (p != nullptr)//循环到尾部
{ i++;
p = p->pNext; } return i; }
template <class T>
bool List<T>::deletet(T t)
{ Node<T> *p = this->find(t);
if (p==nullptr)
{
return false;
}
else
{ if (p==pHead)//头结点
{
pHead = p->pNext;
delete p;
}
else
{
Node<T> *p1, *p2;
p1 = pHead;
p2 = p1->pNext;
while (p2!=p)//删除一个节点,获取前一个节点
{
p1 = p2;
p2 = p2->pNext; } p1->pNext = p2->pNext;//跳过p2
delete p2; }
return true;
}
} template <class T>
void List<T>::sort()
{
for (Node<T> *p1 = pHead; p1 != NULL;p1=p1->pNext)
{
for (Node<T> *p2 = pHead; p2!= NULL; p2 = p2->pNext)
{
if (p1->t < p2->t)
{
T temp;
temp = p1->t;
p1->t = p2->t;
p2 -> t = temp; }
}
}
} template<class T>
void List<T>::deletesame()//重新生成
{ Node<T> *p1, *p2;
p1 = pHead->pNext;
p2 = pHead;
while (p1!=nullptr)
{
if (p1->t==p2->t)
{
//cout << "=";
p2->pNext = p1->pNext;
delete p1;
p1 = p2->pNext;
}
else
{
p2 =p1;
p1 = p1->pNext; }
}
} template<class T>
bool List<T>::clear()
{
if (pHead ==nullptr)
{
return false;
} Node<T> *p1, *p2;
p1 = pHead->pNext;
while (p1!=nullptr)
{
p2 = p1->pNext;
delete p1;
p1 = p2;
}
delete pHead;
pHead = nullptr; return true; }
template<class T>
//递归
void List<T>::rev()
{
if (pHead==nullptr || pHead->pNext==nullptr)
{
return;
}
else
{
Node<T> *p1, *p2, *p3;
p1 = pHead;
p2 = p1->pNext; while (p2!=nullptr)
{
p3 = p2->pNext;
p2->pNext = p1; p1 = p2;
p2 = p3; }
pHead->pNext= nullptr;
pHead = p1; } }
template<class T>
void List<T>::insert(T oldt, T newt)
{ Node<T> *p = find(oldt);
if (p!=nullptr)
{ Node<T> *p1, *p2;
p1 = pHead;
p2 = p1->pNext;
while (p2 != p)
{
p1 = p2;
p2 = p2->pNext; }
Node<T> *pnew = new Node<T>;
pnew->t = newt;
pnew->pNext = p2;
p1->pNext = pnew;
}
} template<class T>
void List<T>::merge(List & list)
{
Node<T> *p = pHead;//获取头结点位置
while (p->pNext != nullptr)//循环到尾部
{ p = p->pNext; }
p->pNext = list.pHead;
}
36.创建模板mylist的更多相关文章
- Orchard之创建模板
orchard创建模板的两种基本方式: 第一种:通过候补创建(需要用到候补神器): 第二种:通过Shape Tracing创建:
- Django创建模板、URL模式、创建视图函数
1.在应用目录下创建模板(templates目录) 在模板目录下创建archive.html <!DOCTYPE html> <html lang="en"> ...
- Aurelia 创建模板
今天介绍一下Aurelia创建模板的三种方式. 模板既可以作为页面也可以作为组件. 1. View+View Model Aurelia的模板通常由一个html文件和一个同名的ts或js文件组成,文件 ...
- Sitecore CMS中创建模板
如何在Sitecore CMS中创建模板. 在/sitecore/templates选择应创建模板的文件夹中. 注意:在多站点项目中,通常会在模板所属的网站名称的/sitecore/templates ...
- 使用MyGeneration创建模板:介绍(翻译)
原文信息 原文地址 原文作者信息: Justin Greenwood MyGeneration Software http://www.mygenerationsoftware.com April 2 ...
- 使用powercli创建模板与克隆虚机
用powercli练练手,需从实际案例出发,本节将使用powercli写两个demo,一个是创建模板,并根据模板创建新的虚机:另一个demo是克隆虚机. [注意] 1.创建模板与克隆操作只能在vcen ...
- angular4 动态创建组件 vs 动态创建模板
实现 模拟场景:页面上"帮助"按钮的点击触发帮助文档的弹出框,且每个页面的帮助文档不一样 因此弹出框里的帮助文档是一个动态模板而不是动态组件 以下comp均代表Type类型的动态 ...
- C++学习笔记36:类模板
类模板的目的 设计通用的类型式,以适应广泛的成员数据型式 类模板的定义格式 template<模板形式参数列表>class 类名称{...}; 原型:template<typenam ...
- 使用Eclipse创建模板并格式化代码
eclipse设置方式: window-preferences-->java-code Style-formatter 在编写完代码后使用代码格式化程序对代码进行格式化,有利于版本冲突时进行对比 ...
随机推荐
- MVVM 中 ViewModelBase和 CommandBase
public class ViewModelBase : INotifyPropertyChanged , IDisposable { public virtual string DisplayNam ...
- php中echo什么时候用到\"这个符号
php中echo什么时候用到\"这个符号 当在引号中用到引号时,为避免混乱用\" \称为转义符,表示后面的字符和原来程序语言里的语法符号含义不同 常见的转义有 \" \' ...
- java中log日志的使用(完全版)
Commons_logging包 Apache通用日志包 他为Log4JLogger:NoOpLog:LogKitLogger:Jdk14Logger:AvalonLogger提供了一共通用的接口进行 ...
- [luogu P4197] Peaks 解题报告(在线:kruskal重构树+主席树 离线:主席树+线段树合并)
题目链接: https://www.luogu.org/problemnew/show/P4197 题目: 在Bytemountains有N座山峰,每座山峰有他的高度$h_i$.有些山峰之间有双向道路 ...
- Java8内置的四大核心函数式接口
package java_8; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import j ...
- POJ 1944 并查集(模拟)
思路: 肯定是要枚举断点的..就看枚举完断点以后怎么处理了-- 1.用类似并查集的思想- f[x]=max(f[x],y)表示x和y相连(一定要注意取max,,,血的教训) 复杂度O(np) 2.猥琐 ...
- vue组件样式添加scoped属性之后,无法被父组件修改。或者无法在本组件修改element UI样式
在vue开发中,需要使用scoped属性避免样式的全局干扰,但是这样在父组件中是无法被修改的,不仅如此如果项目中用了UI框架比如element Ui,这个时候在本组件也无法修改样式,因为权重问题.但是 ...
- php 生成 guid
function guid( $opt = true ){ // Set to true/false as your default way to do this. if( function_exis ...
- HDU 1556 Color the ball【树状数组】
题意:给出n个区间,每次给这个区间里面的数加1,询问单点的值 一维的区间更新,单点查询,还是那篇论文里面讲了的 #include<iostream> #include<cstdio& ...
- RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构
1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Bro ...