`

LinkedSet

GCC 
阅读更多
改了很久的bug
#ifndef LINKEDSET_H
#define LINKEDSET_H

#include<stdlib.h>
#include<iostream>
using namespace std;
template<typename T>
class SetNode{
public:
    T data;
    SetNode<T>* link;
    SetNode():link(NULL){
    }
    SetNode(const T& t,SetNode<T> *next=NULL):data(t),link(next){
    }
};

template<typename T>
class LinkedSet{
private:
    SetNode<T> *first,*last;
public:
    LinkedSet(){first=last=new SetNode<T>();}
    LinkedSet(LinkedSet<T>& R);
    ~LinkedSet(){
        makeEmpty();
        delete first;
    }
    void makeEmpty(){
        SetNode<T> *p = first->link;
        SetNode<T> *pre;
        while(p!=NULL){
            pre = p;
            delete pre;
            p = p->link;
        }
    }

    bool addMember(const T& x);
    bool delMember(const T& x);
    LinkedSet<T>& operator=(LinkedSet<T>& R);
    LinkedSet<T>& operator+(LinkedSet<T>& R);
    LinkedSet<T>& operator*(LinkedSet<T>& R);
    LinkedSet<T>& operator-(LinkedSet<T>& R);
    bool Contains(const T& x);
    bool operator==(LinkedSet<T>& R);
    friend ostream& operator<<(ostream& out,LinkedSet<T>& R){
        SetNode<T> *node = R.first->link;
        while(node!=NULL){
            out << node->data << " ";
            node = node->link;
        }
        out << endl;
        return out;
    }

    bool Min(T& x);
    bool Max(T& x);

};

template<typename T>
LinkedSet<T>::LinkedSet(LinkedSet<T> &R)
{
   SetNode<T> *src = R.first->link;
   first = last = new SetNode<T>;
   while(src!=NULL){
       last->link = new SetNode<T>(src->data);
       src = src->link;
       last = last->link;
   }
}

template<typename T>
bool LinkedSet<T>::Contains(const T &x)
{
    SetNode<T>* temp = first->link;
    while(temp!=NULL&&temp->data<x)
        temp = temp->link;
    if(temp!=NULL&&temp->data==x)
        return true;
    return false;
}

template<typename T>
bool LinkedSet<T>::addMember(const T &x)
{
    SetNode<T> *pre,*node;
    node = first->link;
    pre = first;
    while(node!=NULL&&node->data<x){
        pre = node;
        node = node->link;
    }
    if(node!=NULL&&node->data==x){
        return false;
    }else{
        SetNode<T>* s = new SetNode<T>(x);
        s->link = node;
        pre->link = s;
        if(node==NULL)
            last=s;
    }
    return true;
}

template<typename T>
bool LinkedSet<T>::delMember(const T &x)
{
    SetNode<T> *pre,*node;
    node = first->link;
    while(node!=NULL&&node->data!=x){
        pre = node;
        node = node->link;
    }
    if(node==NULL)//没找到
        return false;
    pre->link = node->link;
    if(node==last)
        last = pre;
    delete node;
    return true;
}

template<typename T>
LinkedSet<T>& LinkedSet<T>::operator=(LinkedSet<T>& R)
{
    SetNode<T> *p = R.first->link;
    SetNode<T> *node = first = new SetNode<T>;
    while(p!=NULL){
        node->link = new SetNode<T>(p->data);
        p = p->link;
        node = node->link;
    }
    node->link = NULL;
    last = node;
    return *this;
}

/*
  将集合this与集合R的并积,将计算结果放入temp中返回
  */
template<typename T>
LinkedSet<T>& LinkedSet<T>::operator+(LinkedSet<T>& R)
{
    SetNode<T> *pa = first->link;
    SetNode<T> *pb = R.first->link;
    //LinkedSet<T> temp我之前这么写总是有问题在这个函数里是对的,然后跑出去的返回
    //值就是脏数据,换成指针后好了,*,-也是这种情况,这是为什么呢?(平台g++)
    LinkedSet<T> *temp = new LinkedSet<T>;
    SetNode<T> *pc = temp->first;
    while(pa!=NULL&&pb!=NULL){
        if(pa->data==pb->data){
            pc->link = new SetNode<T>(pa->data);
            pa = pa->link;
            pb = pb->link;
        }else if(pa->data<pb->data){
            pc->link = new SetNode<T>(pa->data);
            pa = pa->link;
        }else{
            pc->link = new SetNode<T>(pb->data);
            pb = pb->link;
        }
        pc = pc->link;
    }
    while(pa!=NULL){
        pc->link = new SetNode<T>(pa->data);
        pc = pc->link;
        pa = pa->link;
    }
    while(pb!=NULL){
        pc->link = new SetNode<T>(pb->data);
        pc = pc->link;
        pb = pb->link;
    }
    pc->link = NULL;
    temp->last = pc;
    return *temp;
}

template<typename T>
LinkedSet<T>& LinkedSet<T>::operator*(LinkedSet<T>& R)
{
    SetNode<T> *pa = first->link;
    SetNode<T> *pb = R.first->link;
    LinkedSet<T> *temp = new LinkedSet<T>;
    SetNode<T> *pc = temp->first;
    while(pa!=NULL&&pb!=NULL){
        if(pa->data==pb->data){
            pc->link = new SetNode<T>(pa->data);
            pa = pa->link;
            pb = pb->link;
            pc = pc->link;
        }else{
            if(pa->data<pb->data){
                pa = pa->link;
            }else{
                pb = pb->link;
            }
        }
    }
    temp->last = pc;
    pc->link = NULL;
    return *temp;
}

template<typename T>
LinkedSet<T>& LinkedSet<T>::operator-(LinkedSet<T>& R)
{
    SetNode<T> *pa = first->link;
    SetNode<T> *pb = R.first->link;
    LinkedSet<T> *temp = new LinkedSet<T>;
    SetNode<T> *pc = temp->first;
    while(pa!=NULL&&pb!=NULL){
        if(pa->data==pb->data){
            pb = pb->link;
            pa = pa->link;
        }else if(pa->data<pb->data){
            pc->link = new SetNode<T>(pa->data);
            pa = pa->link;
            pc = pc->link;
        }else{
            pb = pb->link;
        }
    }
    while(pa!=NULL){
        pc->link = new SetNode<T>(pa->data);
        pa = pa->link;
        pc = pc->link;
    }
    pc->link = NULL;
    temp->last = pc;
    return *temp;
}

template<typename T>
bool LinkedSet<T>::operator==(LinkedSet<T>& R)
{
    SetNode<T> *pa = first->link;
    SetNode<T> *pb = R.first->link;
    bool equal = true;
    while(pa!=NULL&&pb!=NULL){
        if(pa->data!=pb->data){
            equal = false;
            break;
        }
        pa = pa->link;
        pb = pb->link;
    }
    if(pa!=NULL||pa!=NULL){
        equal = false;
    }
    return equal;
}

#endif // LINKEDSET_H

#include"linkedSet.h"
#include<iostream>
using namespace std;

int main()
{
    LinkedSet<int> ls1,ls2;
    for(int i=0;i<10;i++){
        ls1.addMember(i);
        if(i%2==0)
            ls2.addMember(i);
    }
    LinkedSet<int> ls3=ls1+ls2;
    cout << ls3;
    ls3 = ls1*ls2;
    cout << ls3;
    ls3 = ls1-ls2;
    cout << ls3;

}

0 1 2 3 4 5 6 7 8 9 
0 2 4 6 8 
1 3 5 7 9 
分享到:
评论

相关推荐

    set:使用LinkedHashMap在Go(Golang)中简单的Set数据结构实现

    组 Set是使用LinkedHashMap在Go(Golang)中简单的Set数据结构实现。 该库允许您获取一组int64或string而没有重复的项目。 用法 package main import ( "fmt" ... duplicatedInt64 := [] int64 { 1 , 1 , 2 , 2 , 3 ...

    高级色系PPT11.pptx

    高级色系PPT11.pptx

    node-v7.9.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于tensorflow的的cnn卷积神经网络的图像识别分类

    【作品名称】:基于tensorflow的的cnn卷积神经网络的图像识别分类 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    ### 数据分析概念、使用技巧、优缺点的文章

    数据分析是指通过收集、清洗、处理和解释数据,以发现其中的模式、趋势和关联,从而提供决策支持或洞察见解的过程。它在各行各业中都扮演着至关重要的角色,从市场营销到科学研究,从金融领域到医疗保健,都有广泛的应用。

    对微信帐单进行数据分析

    #pip install pandas -i https://mirrors.aliyun.com/pypi/simple #安装pandas处理数据模块 #pip install xlwt -i https://mirrors.aliyun.com/pypi/simple #安装excel模块 #pip install openpyxl #从微信导出对帐帐单 import pandas as pd #引入pandas,重命名为pd,Python3.9.10版本的Pandas无法兼容低版本的xls import numpy as np #导入均值模块 #从第17行读取csv格式的帐单 df = pd.read_csv('微信支付账单(20230101-20230401).csv',header=16) #分析数据 ...... #将分析数据另存为out.xlsx ..... #进行交易进间分析 ...... #统计交易对方 ...... #将结果保存到excel ..... writer.close()

    node-v7.2.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    作业.docx

    作业.docx

    DB23∕T 2540-2019 智慧城市建设项目可行性研究报告.pdf

    DB23∕T 2540-2019 智慧城市建设项目可行性研究报告.pdf

    在CentOS系统上安装Docker 步骤

    附件是在CentOS系统上安装Docker 步骤,仅供交流学习使用,无任何商业目的! 在执行这些步骤之前,请确保你的CentOS系统已经更新到最新,并且你了解Docker容器技术的相关概念。如果你在安装过程中遇到任何问题,可以查看Docker的官方文档或搜索相关的错误信息。

    node-v0.12.3-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    蜂群系统链性态网体系化作战矩阵.txt

    蜂群系统链性态网体系化作战矩阵.txt

    高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip

    【资源概览】 高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    ### 这是一篇对Qt开发进行了详细概述的文章

    Qt是一套跨平台的C++应用程序开发框架,被广泛应用于开发图形用户界面(GUI)程序、嵌入式系统、移动设备应用等领域。它提供了丰富的类库和工具,使得开发者可以快速构建功能强大、美观易用的应用程序。以下是一个涵盖Qt开发的教程和案例的综合描述。

    高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    node-v7.1.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于深度神经网络的图像分类任务.zip

    基于深度神经网络的图像分类任务.zip

    基于 Flask 发布的深度学习 web 服务.zip

    基于 Flask 发布的深度学习 web 服务.zip

    高分项目 基于STM32F030K6单片机控制各个外设模块的电源控制源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32F030K6通过该单片机控制各个外设模块的电源控制源代码+项目资料齐全+教程文档.zip高分项目 基于STM32F030K6通过该单片机控制各个外设模块的电源控制源代码+项目资料齐全+教程文档.zip高分项目 基于STM32F030K6通过该单片机控制各个外设模块的电源控制源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    高分项目 基于STM32F103单片机的节能型自适应风扇项目源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32F103单片机的节能型自适应风扇项目源代码+项目资料齐全+教程文档.zip高分项目 基于STM32F103单片机的节能型自适应风扇项目源代码+项目资料齐全+教程文档.zip高分项目 基于STM32F103单片机的节能型自适应风扇项目源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

Global site tag (gtag.js) - Google Analytics