在c++中如何在静态数组的末尾添加链表
in c++ how to add a linked list at the end of a static array?
using namespace std;
struct Package_Node
{
int bar_code;
float package_weight;
struct Package_Node *next_packaged;
};
struct Key_Node
{
int key;
struct Package_Node *next_package;
};
Key_Node *keyMain=0;
int weightTemp=0,barcodeTemp=0,keyTemp=0,N=0,X=0,max_value=0,optionChosen=0,optionChosenTwo=0;
float tempWeight;
int main()
{
srand(time(NULL));
do
{
cout << "1 - Enter Number of keys and the Max Valuen2 - Enter Number of Packages (N)n";
cout << "3 - Create Array of Keysn4 - Organize Packagesn5 - Table Statsn6 - Clean Tablen7 - Exitnn";
cin >> optionChosen;
switch(optionChosen)
{
case 1://entering keys and max values
{
cout << "nEnter Number of Keys: ";
cin >>X;
cout <<"nEnter Max Value of the Barcode: ";
cin >>max_value;
break;
}
case 2://enter number of packages.
{
cout << "nEnter Number of Packages: ";
cin >> N;
break;
}
case 3://create array of keys.
{
//Key_Node *keyMain = new Key_Node[X];
keyMain= new Key_Node[X];
for(int i=0;i<X;i++)
{
keyMain[i].key=i;
cout << keyMain[i].key<<endl;
}
break;
}
case 4:
{
for(int i=0;i<N;i++)
{
barcodeTemp = rand() % max_value + 1;
keyTemp = barcodeTemp % X;
tempWeight = rand() % 500 + 1;
keyMain[keyTemp] = new Package_Node;
Package_Node->bar_code=barcodeTemp;
Package_Node->package_weight=tempWeight;
Package_Node->next_packaged=NULL;
}
for(int i=0;i<N;i++)
{
cout << totalPackages[i].bar_code <<endl;
cout << totalPackages[i].package_weight << endl;
}
cout << keyTemp;
break;
}
case 5:
{
break;
}
case 6:
{
break;
}
default:
{
break;
}
}
}while(optionChosen!=7);
}
我有点困惑。keyMain
是一个静态数组。keyMain[1]
, keyMain[2]
等将指向使用Package_Node
生成的链表。添加new package_node
的keyMain
的索引由keyTemp
决定。但这似乎相去甚远。似乎我写的代码不工作。我哪里做错了?什么好主意吗?请不要使用矢量,因为这是一个课程项目,我们根本不会讨论矢量。
在您的代码中,您尝试这样做:
keyMain[keyTemp] = new Package_Node;
Package_Node->bar_code=barcodeTemp;
Package_Node->package_weight=tempWeight;
Package_Node->next_packaged=NULL;
这行不通。这是基本思想:
Package_Node *n = new Package_Node;
n->bar_code = barcodeTemp;
n->package_weight = tempWeight;
n->next_packaged = NULL;
keyMain[keyTemp].next_package = n;
现在Key_Node
数组中的每个项目都有一个单元素列表。如果你想添加到这些列表中,那么普通的基于列表的算法就适用了。
但它看起来像你试图使用它作为一个哈希数组。这意味着您想要向列表添加(或预添加)。加上前缀使代码更具可读性。我会这样做的,如果你想要追加,那么这是一个练习。
// Do this instead of setting it to NULL (from previous code example)
n->next_packaged = keyMain[keyTemp].next_package;
在上面的例子中,当你创建keyMain
数组时,你必须将next_package
初始化为NULL。目前你还没有这样做。因为这是c++,所以熟悉RAII是一个好主意。
最后,下面的代码没有意义:
for(int i=0;i<N;i++)
{
cout << totalPackages[i].bar_code <<endl;
cout << totalPackages[i].package_weight << endl;
}
你需要做的(除非你在某处存储一个名为totalPackages
的数组)是遍历keyMain
数组并打印出所有列表:
for(int i=0;i<X;i++)
{
Package_Node *p = keyMain[i].next_package;
while( p != NULL ) {
cout << p->bar_code << endl;
cout << p->package_weight << endl;
p = p->next_packaged;
}
}
这部分看起来不对
keyMain[keyTemp] = new Package_Node;
Package_Node->bar_code=barcodeTemp;
Package_Node->package_weight=tempWeight;
Package_Node->next_packaged=NULL;
应该像
keyMain[keyTemp].next_package = new Package_Node;
keyMain[keyTemp].next_package->bar_code=barcodeTemp;
keyMain[keyTemp].next_package->package_weight=tempWeight;
keyMain[keyTemp].next_package->next_packaged=NULL;
还有你计算keyTemp的方式
barcodeTemp = rand() % max_value + 1;
keyTemp = barcodeTemp % X;
似乎不正确,因为根据您为max_value输入的内容,它可能大于数组的大小X。
相关文章:
- 将数组的元素添加到链表中
- 如何在链表末尾添加?
- 需要左键作为赋值的左操作数?? 在链表中添加Add_End、删除和Delete_Front?
- 将两个数字添加为链表
- 如何向自身添加链表?
- 如何将节点添加到链表
- 在 C++ 中使用 temp 变量将节点添加到链表的末尾
- 为什么我在尝试添加两个链表时出现此错误?
- 使用链表添加多项式?援助
- 将元素添加到 Head 的双链表
- 如何在链表前面添加和返回节点
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 在 c++ 程序中调试链表以添加两个数字: 有人可以解释为什么 l3=l3->next;导致错误?
- 将新值添加到链表中
- C++添加到包含 char[] 作为参数的链表中
- 链表重载添加
- C++链表将新节点添加到列表的开头
- 排序后将数据添加到链表
- 如何将节点添加到链表C++的前面?我想多了这个概念
- 在c++中如何在静态数组的末尾添加链表