#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使代码更通用。
答案 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
应自行排序并调整right
,left
等,以便您拥有有组织的数据结构。因为我不知道你要对Pyramid
做什么,所以我无法超越这个。