我试图以{1,2,3,4等}的格式选择我的链。您可以在下面找到具有节点布局的头文件。我只是对如何在我的列表中循环打印出项目感到困惑。
非常感谢任何指导!
set.h
using namespace std;
#include <iostream>
class Set
{
private:
struct Node
{
int Item; // User data item
Node * Succ; // Link to the node's successor
};
unsigned Num; // Current count of items in the set
Node * Head; // Link to the head of the chain
public:
// Return information about the set
//
bool is_empty() const { return Num == 0; }
unsigned size() const { return Num; }
// Initialize the set to empty
//
Set();
// Insert a specified item into the set, if possible
//
bool insert( int );
// Display the set
//
void display( ostream& ) const;
};
答案 0 :(得分:3)
以下是两条建议:1)首先对列表进行排序,然后打印所有节点; 2)为数据创建另一个列表(索引)并对这些链接进行排序(不需要这些节点中的数据)。
常用的技术是按照您希望打印的顺序对节点进行排序。这应该涉及更改链接字段 接下来,从头节点开始并打印列表中的每个节点(或列表中每个节点的数据)。
创建另一个没有数据字段的链接列表。此列表中的链接指向原始列表中的数据字段。按照您希望节点打印的顺序排列新列表 该技术保留了第一个列表的创建顺序,并允许不同的排序方案。
由于您正在编写自己的链接列表,因此更改链接仍然是一项练习,因为我没有收到编写代码的报酬。在SO以及用于排序和遍历链表的Web上有很多例子。
答案 1 :(得分:1)
你只想做这样的事情:
void Set::display(ostream &out) const {
for(int i=0; i<Num; i++) {
out << Pool[i] << " ";
}
out << endl;
}
ostream
表现为cout
。
答案 2 :(得分:1)
很难得到你的问题。如果要将数组打印到屏幕,则应考虑编写display()
之类的:
#include <iostream>
#include <iterator>
void Set::display() const {
ostream_iterator<int> out_it (cout," ");
copy(Pool,Pool+Num,out_it);
cout << endl;
}
或者如果你想写一个ostream&
(正如@alestanis在answer中指出的那样)
#include <iostream>
#include <iterator>
void Set::display(ostream &out) const {
ostream_iterator<int> out_it (out," ");
copy(Pool,Pool+Num,out_it);
out << endl;
}
答案 3 :(得分:1)
没有测试,我会做这样的事情。 (假设最后一个节点的Succ
设置为NULL
,正如我建议的那样。)
void LoopList(struct Node *head)
{
for (struct Node *p = head; p != null; p = p->Succ)
{
// Do whatever with this node
Print(p);
}
}
答案 4 :(得分:0)
我想我是在思考它。无论如何,这是我最终做的。现在我只需要为逗号添加一些格式,并且我都可以设置。
Node * Temp;
Temp = new (nothrow) Node;
Temp = Head;
out << "{";
while(Temp->Succ)
{
out << Temp->Item;
Temp = Temp->Succ;
}
out << '}' << endl;
答案 5 :(得分:-2)
假设您的列表是周期性的,您可以使用:
struct Node *n = begin;
if (n != NULL) {
//do something on it
...
for (n = begin->Succ; n != begin; n = n->Succ) {
}
}
或
struct Node *n = begin;
if (n != NULL) {
do {
//do something
...
n = n->Succ;
} while (n != begin)
}