c ++数据结构金字塔用户使用类在cpp中定义数据结构

时间:2017-10-01 17:18:28

标签: c++

#include <iostream>
using namespace std;

class pyramid{

private:
    int count;
    void* Data;
    pyramid* Right;
    pyramid* Left;
    pyramid* Up;
    pyramid* Down;

 public:

    pyramid(void){
        this->Data=0;
        this->count=0;
        this->Up=NULL;
        this->Down=NULL;
        this->Left=NULL;
        this->Right=NULL;

    }
    bool isPyramidFull(){
        if(this->Up != NULL )
            return true;
        return false;
    }
    bool isPyramidEmpty(){
    if(this->Up == NULL )
            return true;
        return false;
    }
    void insertData(){}//stuck at this point how to set data using 
    //VOID POINTER
    void deleteData(){}//stuck at this point how to set data using 
    //VOID POINTER

};


int main() {

    pyramid p;
    p.insertData();
    p.deleteData();

    return 0;
}

我是cpp的初学者,也是数据结构设计我自己的DS的初学者。 以适当的方式寻求帮助和指导,以实施我的DS 在顶层三层的金字塔(1>在面上,我们可以看到2->从左到右面对3-> 面对面但是面对面 - >左 - >左>并且只是底部再次三层(三个1&gt;面2-和左3-左>左>左)我想要一个ds在void指针中保存所有类型的数据也只是一个ds就像PYRAMID一样 当我们向下移动金字塔数据时,要保持的最高优先级数据会增加,优先级会降低,因为向下移动ds会在金字塔内部保留大量数据,因此可以存储更安全的数据,因此可以向左上移动并保存数据void poiter使代码更通用。

1 个答案:

答案 0 :(得分:1)

好的,所以您希望添加类型为Data的用户提供的void*。我假设这个Data不是数组而是单个值。要做到这一点你会做(这没有测试):

pyramid::~pyramid()
{
  delete Data;
}

void insertData(void* data, unsigned int size)
{
  delete Data; // Clear out any existing memory.
  Data = reinterpret_cast<void*>(new unsigned char[size]); //Allocate memory.
  std::memcpy(Data, data, size);  // copy user 'data' to 'Data'.
}

然后您将按如下方式使用您的代码:

void main()
{
  pyramid p;
  int some_data = 10;

  p.insertData(static_cast<void*>(&some_data), sizeof(some_data));
}

更好的方法

使用模板,因为它可以消除与复制未知内存和分配相关的问题。另外,请与命名保持一致。请记住,其他人必须阅读您的代码。

template <typename T>
class Pyramid
{
private:
    int count;
    T data; // No need for pointer since data structure should hold its own data.
    Pyramid* right;
    Pyramid* left;
    Pyramid* up;
    Pyramid* down;

 public:

    Pyramid()
      : count(0), right(nullptr), left(nullptr), up(nullptr), down(nullptr)
    {}

    bool isPyramidFull() { return up != nullptr; }

    bool isPyramidEmpty() { return up == nullptr; }

    void insertData(T dataItem) { data = dataItem; }

    void deleteData()
    {
       // This whole Pyramid class should be deleted which means you'll
       // have to reconnect the left, right, up and down pointers manually.
    }

};

要使用此新模板表单,请执行以下操作:

void main()
{
  Pyramid<int> p;
  p.insertData(10);
}

结论

您需要更好地定义此数据结构的行为方式。函数insertData应自行排序并调整rightleft等,以便您拥有有组织的数据结构。因为我不知道你要对Pyramid做什么,所以我无法超越这个。