首页 技术 正文
技术 2022年11月21日
0 收藏 561 点赞 2,420 浏览 5045 个字
  • 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;
    }
上一篇: Copying
下一篇: IBM优质资源
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,023
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,513
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,360
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,774
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,852