Question #196726

Implement MeraSet3 class similar to the last assignment. Make it unlimited, ie. use new and delete to extend or contract the memory size of the underlying array as required. Initially make it size 1, and grow it to two when you have the first insert, and so on. Similarly, reduce the size by 1 when a member element is removed.


Expert's answer

class MeraSet3{
    int *items, number;
    public:
    MeraSet3(): number(0) {}
    int Insert(int e){
        if(number == 0){
            items = new int[1];
            number++;
            items[0] = e;
            return 1;
        }
        for(int i = 0; i < number; i++){
            if(items[i] == e) return -1;
        }
        items = (int*) realloc(items, ++number * sizeof(int));
        items[number - 1] = e;
        return 1;
    }
    int Remove(int e){
        for(int j = 0; j < number; j++){
            if(items[j] == e){
                int *arr = new int[number];
                for(int i = 0; i < number; i++) arr[i] = items[i];
                items = (int*) realloc(items, --number * sizeof(int));
                for(int i = 0, k = 0; i < number + 1; i++){
                    if(i == j) continue;
                    else{
                        items[k] = arr[i];
                        k++;
                    }
                }
                return 1;
            }
        }
        return -1;
    }
    void Print(){
        if(number == 0) cout<<"{}";
        else{
            cout<<"{";
            for(int i = 0; i < number; i++) cout<<items[i]<<",";
            cout<<"\b}";
        }
    }
    int cardinality(){
        return number;
    }
    MeraSet3 operator+(const MeraSet3 &temp){
        MeraSet3 result = *this;
        for(int i = 0; i < temp.number; i++) result.Insert(temp.items[i]);
        return result;
    }
    MeraSet3 operator-(const MeraSet3 &temp){
        MeraSet3 result = *this;
        for(int i = 0; i < temp.number; i++) result.Remove(temp.items[i]);
        return result;
    }
    MeraSet3(const MeraSet3 &temp){
        this->number = temp.number;
        this->items = new int[this->number];
        for(int i = 0; i < this->number; i++) this->items[i] = temp.items[i];
    }
};

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

LATEST TUTORIALS
APPROVED BY CLIENTS