2012-02-20 111 views
0

我想格式化链接列表,以便每行打印5个节点。我不确定如何做到这一点,因为我是运营商重载的新手。下面是一些我尝试,但即时通讯固守成规,并不能似乎掌握概念通过重载格式化链接列表输出<<

 ostream &operator<<(ostream &os, List &s){ 

    nodeType<Type>* current = s.head; 
    int i = 0; 

while (current != NULL) //while more data to print 
{ 
os << current->info << " "; 
current = current->link; 

++i; 

if (i % 5 == 0) { 
    cout << '\n'; 
    i = 0; 
} 
} 

os << '\n'; // print the ending newline 

     return os; 
    } 

其他地区代码

list.cpp

List::List() 
{ 
node *head = NULL; 
node *precurrent = NULL; 
node *current = NULL; 
int *temp = 0; 
insert = 0; 
search = 0; 
remove = 0; 
} 

List::~List() 
{ 
while (head != 0) 
    remove(); 
} 

void List::insert(int insert) 
{ 
if (head==null) \\If there is no list already, create a new head. 
{ 
    temp = new Node; 
    temp->data = insert; 
    head = temp; 
} 
else    \\otherwise, insert the new node after current 
{ 
    temp = new Node; 
    temp->data = insert; 
    temp->next = current->next; 
    current->next = temp; 
} 
} 

void List::search(int search) 
{ 
current=head; 
while (head->next != 0) //Cycle through the list, and if the number is found, say so 
{ 
    if (current->data = search) 
     cout<<"Number found."<<endl; 
    else 
     cout<<"Number not found."<<endl; 
} 
} 

void List::remove(int remove) 
{ 
if (head == null) 
    cout <<"Error. No List."<<endl; 
else if (head->next == null) 
{ 
    num = head->data; 
    delete head; 
    head=null; 
    current=null; 
} 
else if (head == current) 
{ 
    temp = head->next; 
    num = head->data; 
    delete head; 
    head=temp; 
    current=temp; 
} 
else 
{ 
    temp = current->next; 
    num = current->data; 
    delete current; 
    precurrent->next = temp; 
    current = temp; 
} 
} 

list.h

//CLASS PROVIDED: list         
// 
// CONSTRUCTOR for the list class: 
// list() 
//  Description:  Constructor will initialize variables 
//  Preconditions: None 
//  Postcondition: int insert = "" 
//      int search = "" 
//      int remove = "" 
// ~list() 
//  Description:  Destructor destroys variables 
//  Preconditions: None 
//  Postcondition: variable deleted 
// 
// MEMBER FUNCTIONS for the list class  
// 
// string insert(int) 
//  Description: Inserts an integer into a linked list 
//  Precondition: none 
//  Postcondition: function returns Success/Error message. 
// 
// string search(int); 
//  Description:  Searches for certain linked list member and returns int to set current variable 
//  Precondition: none 
//  Postcondition: function returns int 
// 
// string remove(int); 
//  Description:  removes linked list member 
//  Precondition: user sends int to be deleted 
//  Postcondition: function returned string sddress 
// 
// void display(void); 
//  Description:  displays entire linked list 
//  Precondition: none 
//  Postcondition: function returns screen output 
// 
// void quit(void); 
//  Description:  closes program 
//  Precondition: none 
//  Postcondition: none 
// 


#ifndef EMPLOYEE_H 
#define EMPLOYEE_H 

#include <string> 
#include <iostream> 
#include <cstdlib> 

using namespace std; 

class list 
{  
    public: 
//CONSTRUCTOR/DESTRUCTOR--------------------- 
    list(); 
    ~list();          

//GETS--------------------------------------- 
    void insert(int); 
    string search(int); 
    string remove(int); 
    void display(void); 
    void quit(void); 

    private: 

     int insert; 
     int search; 
     int remove; 


}; 




#endif 

回答

1

您需要将current设置为s.head,而不仅仅是head,这是没有定义的,因为这个非成员运算符重载(顾名思义)不是成员。

你也在推进指针完全错误;你应该打印一张info在这样每次迭代:

编辑:如果您想打印5每行,那么这样做:

int i = 0; 

while (current != NULL) //while more data to print 
{ 
    os << current->info << " "; 
    current = current->link; 

    if (i % 5 == 0) { 
     cout << '\n'; 
     i = 0; 
    } else 
     ++i; 
} 

os << '\n'; // print the ending newline 

而且Type没有被定义(除非它是在代码中,你的天堂的地方张贴)。如果您的List是模板,则需要让运算符也使模板超载。

请初始化变量,而不是声明它们,然后分配给它们。这:

nodeType<Type> *current; //pointer to traverse the list 
current = head; //set current so that it points to the first node 

应该

nodeType<Type>* current = s.head; 
+0

我编辑添加我的代码 – dtturner12 2012-02-20 04:29:15

+0

休息@ dtturner12没有帮助,因为我不知道这有什么错我的回答你。 – 2012-02-20 04:31:01

+0

谢谢你的回答。我现在理解推进和打印好多了。但是,我会如何将它打印到5个节点部分?我想列表打印这样的东西1 2 3 4 5“newline”6 7 8 9 10 – dtturner12 2012-02-20 04:34:50