C++ 如何将动态数组中的数组指向某个对象?
我有一个C++ 如何将动态数组中的数组指向某个对象?,c++,arrays,dynamic,linked-list,C++,Arrays,Dynamic,Linked List,我有一个结构,如下所示: struct Key_Node { int key; struct Package_Node *next_package; }; 我将创建一个动态数组“struct Key\u Node arrayMain[X]”,其中用户将输入X的值,并根据该值创建动态数组 由于我不知道数组的大小,显然我无法将动态数组的每个指针指向某个对象。那么我在这里要做什么呢 我有另一个类似这样的struct struct Package_Node { int bar_
结构
,如下所示:
struct Key_Node
{
int key;
struct Package_Node *next_package;
};
我将创建一个动态数组“struct Key\u Node arrayMain[X]
”,其中用户将输入X
的值,并根据该值创建动态数组
由于我不知道数组的大小,显然我无法将动态数组的每个指针指向某个对象。那么我在这里要做什么呢
我有另一个类似这样的struct
struct Package_Node
{
int bar_code;
float package_weight;
struct Package_Node *next_packaged;
};
Key\u节点主数组[dynamicvalue]
和
package\u节点totalPackages[dynamicvalue]
是按顺序排列的动态数组和链表。我将创建随机包,并使用哈希表方法对它们进行排序。如果我的
X
是3,而我的随机条形码是10,我将执行10%3
,结果是1,因此随机package\u节点将添加到mainArray[1]
,列表将像那样增长。看来您需要一些帮助才能开始。看起来您被要求实现一个。在C
中使用malloc
分配动态存储,在C++
中使用new
,请参阅
这应该会让你开始,希望能有所帮助
#include <iostream>
struct Key_Node
{
int key;
struct Package_Node *next_package;
};
struct Package_Node
{
int bar_code;
float package_weight;
struct Package_Node *next_packaged;
};
int main() {
size_t X;
std::cout << "Enter X: ";
std::cin >> X;
Key_Node *mainArray = new Key_Node[X];
for(size_t i=0; i<X; ++i) {
mainArray[i].next_package = NULL;
}
//-- Rest of your program goes here
delete [] mainArray;
return 0;
}
#包括
结构键节点
{
int键;
结构包\节点*下一个\包;
};
结构包节点
{
int条码;
浮箱重量;
结构包节点*下一个包;
};
int main(){
尺寸X;
std::cout>X;
Key_节点*mainArray=新Key_节点[X];
对于(size_t i=0;i好的,我想我能理解,但我可能离得太远了
重要提示:这是C++,但我不能确定你实际上并没有使用C(这更复杂)。到目前为止你所发布的代码和你想执行的任务感觉像C.<
首先,快速介绍链接列表。它们有一个“head”元素,然后每个元素指向列表中的下一个元素:
struct Item {
Item *next;
// data here
};
struct ItemList {
Item *first;
};
ItemList myList;
myList.first = new Item( );
myList.first->next = new Item( );
myList.first->next->next = new Item( );
这是一种设置链表的愚蠢方法,但演示了其结构;我们通过逐个遍历每个元素来查找节点
您需要一个使用链接列表的哈希表(根据我收集的数据)。这意味着您将拥有一个固定长度的链接列表数组,并能够向其中添加项目:
struct Item {
Item *next;
int key;
int something;
};
struct ItemList {
Item *first;
};
const int NUM_BUCKETS = 3;
ItemList keys[NUM_BUCKETS];
Item *addItemKey( int key, Item *o ) {
int index = key % NUM_BUCKETS;
if( keys[index].first != NULL ) {
o->next = keys[index].first;
}
o->key = key;
keys[index].first = o;
return o;
}
int main( ) {
Item *myItem1 = addItemKey( 10, new Item( ) );
myItem1->something = 7;
Item *myItem2 = addItemKey( 5, new Item( ) );
myItem2->something = 3;
}
那么这有什么用呢?addItemKey会把你给它的东西放到一个“桶”里如果已经存在一个项目,它会将其推送到第二个项目。它还会返回该项目作为一种方便。了解这里发生的事情很重要,所以请花一些时间来处理我在本文末尾链接到的示例
要从键中查找项,必须再次计算索引并循环相应的列表,直到其中一项匹配:
Item *findItemKey( int key ) {
int index = key % NUM_BUCKETS;
Item *test = keys[index].first;
while( test != NULL ) {
if( test->key == key ) {
return test;
}
test = test->next;
}
return NULL;
}
int main( ) {
// set up the items as before here
Item *myFoundItem = findItemKey( 10 );
if( myFoundItem != NULL ) {
cout << myFoundItem->something << endl; // should say 7 with the code above
}
}
Item*findItemKey(int键){
int index=键%NUM\u bucket;
Item*test=键[索引]。首先;
while(test!=NULL){
如果(测试->键==键){
回归试验;
}
测试=测试->下一步;
}
返回NULL;
}
int main(){
//如前所述在此处设置项目
项目*myFoundItem=findItemKey(10);
如果(myFoundItem!=NULL){
您是否需要结构的另一个元素,类型为std::size\u t
,用于存储数组的长度。您实际上想在这里实现什么?这个“下一个\u包”是什么?为什么不使用std::vector而不是C样式的数组?当然,这个问题的答案很有可能是由对的答案隐式给出的。@Dave:@Johnysweb:啊,我不知道。user2086751:对不起,忽略家庭作业标记位。我已经过时了!你能用更多的上下文更新你的问题吗?你更可能会得到答案这样的答案。(我所说的上下文是指更多的代码或更好地解释您期望它如何工作)