在C++中垂直和水平显示链表节点



在提出以下问题之前,我确实尽了4个小时的努力寻找答案,但不幸的是,我没有在C++中找到我想要的东西。希望你们中的一些人能帮助我。问题很简单。我有一个链表,其节点采用2个键值,例如:

struct myNode{
  int a ;
  int b ;
  myNode *nextNode ;
  myNode *prevNode ;
} ;

我可以使用COUT垂直显示这样一个列表的所有节点,例如(伪代码):

while (myList){
  cout << myList->a << " " << myList->b << "n" ;
  increment myList (myList = myList->nextNode) ;
}

结果将是:

 a1 b1
 a2 b2
 a3 b3
 .
 .
 .
 an bn

与其垂直显示,我想水平显示它们,结果类似于:

a1 a2 a3 a4 ... an
b1 b2 b3 b4 ... bn

换句话说,我如何在C++中垂直打印n个元素,然后向右移动,开始垂直打印其他n个元素(从第一行开始),与前一列平行,以此类推…

谢谢你的回答。

L。

在控制台中跳回一行需要特定于操作系统的方法,在这种情况下不建议使用。我能想到的最简单的方法是使用两个循环,比如:

while (myList)
{
    cout << myList->a << " ";
    increment myList (myList = myList->nextNode);
}
cout << "n";
// set myList to begin
while (myList)
{
    cout << myList->b << " ";
    increment myList (myList = myList->nextNode);
}

我没有发现问题。例如

int const n = blahblah;
for( auto p = myList; p != nullptr; p = p->nextNode )
{
   cout << setw( n ) << p->a;
}
cout << endl;
for( auto p = myList; p != nullptr; p = p->nextNode )
{
   cout << setw( n ) << p->b;
}
cout << endl;

更新

在一条评论中,OP解释了他认为的上述问题:

如果我们使用上面提出的解决方案,我们将需要为列表的每个键值编写一个For或While循环。

代码复制非常容易–琐碎地–通过命名参数化序列输出操作(例如)进行补救

template< class Pointer, class MemberPointer >
void display_value_sequence( Pointer const my_list, MemberPointer const m )
{
    int const n = blahblah;
    for( auto p = my_list; p != nullptr; p = p->nextNode )
    {
        cout << setw( n ) << p->*m;
    }
}
void foo()
{
    // ...
    using Node = decltype( *myList );
    display_value_sequence( myList, &Node::a );   cout << endl;
    display_value_sequence( myList, &Node::b );   cout << endl;
}

人们可能会对此进行抽象,例如,某个函数返回项的字符串表示的vector<string>,等等,但我认为这还为时过早。

免责声明:代码未经编译器处理。

相关内容

  • 没有找到相关文章

最新更新