我想实现一个链表列表来创建打印队列;有五个队列的数组。每个队列用于表示用户打印发送到打印机的作业。
这是我目前的代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
struct node
{
float value;
struct node *next;
};
node *head = NULL;
node* A[5];
int insertNodes(node *head, int value)
{
node *aNode, *Ptr;
aNode = new node;
aNode->value = value;
aNode->next = NULL;
if (head == NULL)
head = aNode;
else
{
Ptr = head;
while (Ptr->next != NULL)
Ptr = Ptr->next;
Ptr->next = Ptr;
}
return head;
}
int _tmain(int argc, _TCHAR* argv[])
{
int num;
for (int i = 0; i < 5; i++)
{
cout << "Insert number";
cin >> num;
A[i] = insertNodes(i, num)
}
return 0;
}
此代码无法正常工作,因为我无法添加&#34; jobs&#34;到队列。 我哪里出错?
答案 0 :(得分:1)
您的代码存在许多问题:
您使用C ++编程,而不是C编程,因此您应该只编写struct node *next
而不是node *next
。
您的insertNodes
函数会返回指向列表头部的指针,因此您需要返回node*
,而不是int
。
当您插入具有现有头部的列表时,您永远不会插入该项目。您必须Ptr->next = aNode
,而不是Ptr->next = Ptr
。
在您的main函数中,您需要将指向列表头部的指针传递给insertNodes
,但实际上是将int
传递给它。相反,请尝试A[i] = insertNodes(A[i], num)
。
您将float
存储在列表节点中,但输入int
- 是否真的需要?
但是,由于您使用的是C ++,因此您可以完全依靠标准库已经提供的内容来避免大部分陷阱。
只需#include <deque>
即可使用std::deque
所有内容( d ouble- e nded que ue )提供,包括push_back
在末尾添加元素,front
访问第一个元素,pop_front
删除它 - 真正的队列,不需要自定义链接列表:
#include "stdafx.h"
#include <deque>
#include <vector>
#include <iostream>
std::vector<std::deque<float>> A {5};
int _tmain(int argc, _TCHAR* argv[])
{
float input;
for (int i = 0; i < 5; i++)
{
std::cout << "Insert number: ";
std::cin >> input;
A[i].push_back(input);
}
return 0;
}