• 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的更多相关文章

  1. Orchard之创建模板

    orchard创建模板的两种基本方式: 第一种:通过候补创建(需要用到候补神器): 第二种:通过Shape Tracing创建:

  2. Django创建模板、URL模式、创建视图函数

    1.在应用目录下创建模板(templates目录) 在模板目录下创建archive.html <!DOCTYPE html> <html lang="en"> ...

  3. Aurelia 创建模板

    今天介绍一下Aurelia创建模板的三种方式. 模板既可以作为页面也可以作为组件. 1. View+View Model Aurelia的模板通常由一个html文件和一个同名的ts或js文件组成,文件 ...

  4. Sitecore CMS中创建模板

    如何在Sitecore CMS中创建模板. 在/sitecore/templates选择应创建模板的文件夹中. 注意:在多站点项目中,通常会在模板所属的网站名称的/sitecore/templates ...

  5. 使用MyGeneration创建模板:介绍(翻译)

    原文信息 原文地址 原文作者信息: Justin Greenwood MyGeneration Software http://www.mygenerationsoftware.com April 2 ...

  6. 使用powercli创建模板与克隆虚机

    用powercli练练手,需从实际案例出发,本节将使用powercli写两个demo,一个是创建模板,并根据模板创建新的虚机:另一个demo是克隆虚机. [注意] 1.创建模板与克隆操作只能在vcen ...

  7. angular4 动态创建组件 vs 动态创建模板

    实现  模拟场景:页面上"帮助"按钮的点击触发帮助文档的弹出框,且每个页面的帮助文档不一样 因此弹出框里的帮助文档是一个动态模板而不是动态组件 以下comp均代表Type类型的动态 ...

  8. C++学习笔记36:类模板

    类模板的目的 设计通用的类型式,以适应广泛的成员数据型式 类模板的定义格式 template<模板形式参数列表>class 类名称{...}; 原型:template<typenam ...

  9. 使用Eclipse创建模板并格式化代码

    eclipse设置方式: window-preferences-->java-code Style-formatter 在编写完代码后使用代码格式化程序对代码进行格式化,有利于版本冲突时进行对比 ...

随机推荐

  1. 国家人工智能(AI)的美好前景

    在今年两会期间.李彦宏(Robin Lee,1968-)关于人工智能(AI)"国家优先"的提案,即所谓的"中国大脑"计划.依据何在?为什么? 近几年,世界互联网 ...

  2. GNU Linux中的SO_RCVLOWAT和SO_SNDLOWAT说明

    /*********************************************************************  * Author  : Samson  * Date   ...

  3. Python——异常基础

    异常基础 在Python中,异常会依据错误自己主动地被触发.也能由代码触发和截获.异常由五个语句处理: 1.[try/except]:捕捉由Python或你引起的异常并恢复. 2.[try/final ...

  4. 深入分析Java中的I/O类的特征及适用场合

    Java中有40多个与输入输出有关的类.假设不理清它们之间的关系.就不能灵活地运用它们. 假设从流的流向来分,可分为输入流和输出流,而输入流和输出流又都可分为字节流和字符流.因而可将Java中的I/O ...

  5. WebRTC代码走读(八):代码文件夹结构

    转载注明出处http://blog.csdn.net/wanghorse ├── ./base //基础平台库,包含线程.锁.socket等 ├── ./build //编译脚本.gyp ├── ./ ...

  6. bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)

    bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋 ...

  7. RAC连接时的2种方式Connect Time Failver和taf

    1. Client-side Connect Time Failover  在客户端的tnsname中配置多个地址,当用户连接时会按照次序尝试各个地址,直到连接成功,连接好后,不再检测地址是否可用,如 ...

  8. javascript系列-class7.Date对象

    1.对象   什么是对象?       对象的类型是Object.   JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...   javaScript中万事万物皆对象   用官方 ...

  9. luogu 1351 联合权值

    联合权值 题目大意 给你一个图,有\(n-1\)条边,距离均为\(1\),每距离为\(2\)的两个点的联合权值为\(W_u \times W_v\),求联合权值的最大值和联合权值总和. solutio ...

  10. RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构

    1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Bro ...